All Engines
Workforce Analytics

PEPY Normalization Engine

Convert PMPM to Per-Employee-Per-Year—Account for Dependent Ratios, Part-Time Mix, and Coverage Tier Distribution

The PMPM vs. PEPY Confusion

PMPM Misinterpretation

  • CFOs compare $450 PMPM across companies without adjusting for dependent coverage
  • Company A: 70% single coverage vs. Company B: 55% family coverage (not apples-to-apples)
  • Part-time employees skew PMPM calculations (50% FTE with full benefits)
  • Cannot compare healthcare cost as % of payroll without PEPY conversion

PEPY Normalization

  • Convert PMPM → PEPY using actual coverage tier distribution (single, +spouse, +children, family)
  • Adjust for dependent ratios: 2.2 covered lives per family tier vs. 1.0 for single
  • FTE normalization: part-time employee cost allocated correctly
  • Apples-to-apples benchmarking across employers with different coverage patterns

PMPM to PEPY Conversion Algorithm

python
# PEPY Normalization from PMPM def convert_pmpm_to_pepy(claims_data, enrollment_data): # Step 1: Calculate total cost and member months total_cost = claims_data.total_paid_claims total_member_months = claims_data.total_member_months pmpm = total_cost / total_member_months # Step 2: Analyze coverage tier distribution tier_distribution = enrollment_data.groupby('coverage_tier').agg({ 'employee_count': 'count', 'covered_lives': 'sum' }) # Coverage Tier Typical Ratios: # Single: 1.0 life per employee # Employee + Spouse: 2.0 lives per employee # Employee + Children: 2.8 lives per employee (avg 1.8 kids) # Family: 3.2 lives per employee (spouse + 2.2 kids avg) tier_ratios = { 'single': 1.0, 'employee_spouse': 2.0, 'employee_children': 2.8, 'family': 3.2 } # Step 3: Calculate average lives per employee total_employees = tier_distribution['employee_count'].sum() total_covered_lives = tier_distribution['covered_lives'].sum() avg_lives_per_employee = total_covered_lives / total_employees # Step 4: Convert PMPM to PEPY # PEPY = PMPM × 12 months × avg_lives_per_employee pepy = pmpm * 12 * avg_lives_per_employee # Step 5: FTE Adjustment (if applicable) if 'fte_status' in enrollment_data.columns: avg_fte = enrollment_data['fte_hours'].mean() / 2080 # 2080 = full-time annual hours pepy_fte_adjusted = pepy / avg_fte else: pepy_fte_adjusted = pepy return { 'pmpm': pmpm, 'avg_lives_per_employee': avg_lives_per_employee, 'pepy': pepy, 'pepy_fte_adjusted': pepy_fte_adjusted, 'tier_distribution': tier_distribution, 'total_employees': total_employees, 'total_covered_lives': total_covered_lives } # Benchmarking Example def compare_pepy_across_employers(company_a, company_b): a_result = convert_pmpm_to_pepy(company_a.claims, company_a.enrollment) b_result = convert_pmpm_to_pepy(company_b.claims, company_b.enrollment) return { 'company_a': { 'pmpm': a_result['pmpm'], 'pepy': a_result['pepy'], 'lives_per_employee': a_result['avg_lives_per_employee'] }, 'company_b': { 'pmpm': b_result['pmpm'], 'pepy': b_result['pepy'], 'lives_per_employee': b_result['avg_lives_per_employee'] }, 'variance': { 'pmpm_diff': ((b_result['pmpm'] / a_result['pmpm']) - 1) * 100, 'pepy_diff': ((b_result['pepy'] / a_result['pepy']) - 1) * 100 } } # Example Output: # Company A (Tech, 75% single coverage): # PMPM: $420 # Avg Lives/Employee: 1.4 # PEPY: $7,056 # # Company B (Manufacturing, 60% family coverage): # PMPM: $485 (+15.5% vs. A) # Avg Lives/Employee: 2.6 # PEPY: $15,132 (+114% vs. A) # # Interpretation: Company B's PMPM looks 15% higher, but PEPY is 114% higher # due to much higher dependent coverage. True cost per employee is far worse.

Normalization Intelligence

Coverage Tiers
4 Types
single, +spouse, +children, family
Typical Lives/Employee
1.6-2.4
depends on industry and demographics
FTE Adjustment
Automated
part-time workforce normalization
Benchmarking
Apples-to-Apples
vs. industry peers

Real-World Applications

Misleading PMPM Benchmark

  • CFO saw industry PMPM benchmark: $425
  • Company's PMPM: $485 (14% above benchmark, looked bad)
  • PEPY analysis revealed:
  • - Company: 62% family coverage (avg 2.5 lives/employee)
  • - Benchmark: 70% single coverage (avg 1.5 lives/employee)
  • Company PEPY: $14,550
  • Benchmark PEPY: $7,650 (adjusted for coverage mix)
  • True variance: +90% (much worse than PMPM suggested)
  • Triggered benefits redesign to reduce family-tier uptake

Part-Time Workforce PEPY

  • Retail employer: 40% part-time workforce (avg 0.6 FTE)
  • PMPM: $380 (looked competitive)
  • PEPY unadjusted: $6,840
  • PEPY FTE-adjusted: $11,400 (true cost per full-time equivalent)
  • Comparison: peer full-time employers at $9,200 PEPY FTE-adjusted
  • Company was actually 24% more expensive per FTE
  • Redesigned part-time eligibility rules, saved $1.8M annually

Stop Comparing PMPM Without Context

Convert PMPM to PEPY. Account for dependent ratios and part-time mix. Compare apples-to-apples. Know your true cost per employee.

Normalize to PEPY