Skip to content

[ENH] Meta-Estimators #1135

Description

@henrydingliu

Description

we are facing two immediate tests of package maturity in the process of recreating Friedland

  • Chapter 11 FreqSev is requiring a decent amount of manual workflows
  • Chapter 12 Case Outstanding requires more averaging parameters than the current implementation

Is your feature request aligned with the scope of the package?

  • Yes, absolutely!
  • No, but it's still worth discussing.
  • N/A (this request is not a codebase enhancement).

Describe the solution you'd like, or your current workaround.

@priyam0k suggested meta-estimators, which makes a lot of sense. for example, FrequencySeverity could be a meta-estimator that just multiples the ultimate_ of its constituent estimators. This should cover Approach no. 1 and no. 2 from Friedland.

Some additional meta-estimators we should look into

  • refactor CaseOutstanding as a meta-estimator
  • Approach no. 3 likely needs a separate FullTriangleFreqSev (pending better naming) meta-estimator

Before we get too far down the rabbit hole of meta-estimators, we should also provide QoL follow-ups

  • enhance model_diagnostics to accept all meta-estimators
  • probably a new public class for meta-estimators (we only have a private one in the package currently). to define properties that model_diagnostics can pick up from meta-estimators

Do you have any additional supporting notes?

Some code snippet to illustrate the idea

standard_pipe = cl.Pipeline(
    steps=[
        ('tri_sel', cl.TriangleSelector()),
        ('dev', cl.Development()),
        ('tail', cl.TailConstant()),
        ('model', cl.Chainladder())
   ]
)
exh1_ccc = clone(standard_pipe)
exh1_ccc .set_params(
   tri_sel__col = 'Closed Claim Counts',
   tail__tail = 1
)
exh1_rcc = clone(standard_pipe)
exh1_rcc .set_params(
   tri_sel__col = 'Reported Claim Counts',
   tail__tail = 1
)
exh1_rsev = clone(standard_pipe)
exh1_rsev .set_params(
   tri_sel__col = 'Reported Severity',
   tail__tail = 1
)
exh1_freq = cl.VotingChainladder(
   estimators = [
      ('ccc',exh1_ccc),
      ('rcc',exh1_rcc),
  ],
   weight = ...
)
exh1 = cl.FrequencySeverity(
   estimators = [
      ('count',exh1_freq),
      ('severity',exh1_rsev),
  ]
)

exh1.fit(cl.load_sample('friedland_auto_freq_sev'))

Would you be willing to contribute this ticket?

  • Yes, absolutely!
  • Yes, but I would like some help.
  • No.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Fields

    Priority

    Medium

    Effort

    High

    Scope

    Codebase

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions