--- # Default customer-profile template. # Copy to a Volume, edit, and point CR_PROFILE_TEMPLATE_PATH at it to customize. # Two declared data sources, both optional: # * feature_deviation — top-N deviation rows (right-hand panel; SHAP placeholder) # * customer — single profile row (left column; override per dataset) # Either source returning empty is rendered gracefully — the section just hides. data: feature_deviation: source: "v_account_feature_deviation_topn" join_key: "entity_id" order_by: "deviation_rank ASC" limit: 12 as_list: true ---
{{#if playbook_name}} {{/if}}
Customer

{{entity_id}}

{{risk_tier}} risk tier
{{fmt_pct churn_probability}} churn probability
Value at risk {{fmt_currency value_at_risk}}
Expected loss {{fmt_currency expected_loss}}
Policy rank {{fmt_int policy_rank_among_eligible}}
Eligible plays {{fmt_int eligible_playbook_count}}
{{#if customer}}
Customer

Profile

A dataset-specific template is loaded but did not declare any visible fields. Edit the template's frontmatter and HTML to surface the fields your CSMs need.

{{/if}}
{{#if account_top_shap_features}}
Why the model flagged this account

Top SHAP drivers

Each row is one factor the model leans on for this customer. The left number is the customer's actual value and the pill next to it shows where that value sits versus everyone else (very low → very high). The bar reads from the middle outward — right (yellow) drives risk, left (green) is protective, the middle is "no effect". Bar lengths are normalised so the strongest driver in the panel hits 100% and the others scale relative to it, letting you compare magnitudes across the five factors at a glance. The right number is the signed contribution to the churn log-odds.

    {{#each account_top_shap_features}}
  • {{this.feature}} {{fmt_raw_value this.raw_value}} {{quantile_band this.raw_value this.q05 this.q25 this.q75 this.q95}} {{fmt_signed_shap this.shap_contribution}}
  • {{/each}}
{{#if feature_dictionary}}
What these factors mean Feature dictionary · lineage and definition

Where each factor above comes from, how it's computed, and what it represents in business terms. Pulled from feature_meta + column_descriptions for the latest scoring run.

    {{#each feature_dictionary}}
  • {{this.feature}} {{#if this.window_phrase}}{{this.window_phrase}}{{/if}} {{#if this.aggregation_kind}}{{this.aggregation_kind}}{{/if}}

    {{#if this.business_phrase}}{{this.business_phrase}}{{else}}{{derivation_phrase this.aggregation_kind this.feature this.source_columns this.window_phrase}}{{/if}}

    How it's computed
    {{derivation_phrase this.aggregation_kind this.feature this.source_columns this.window_phrase}}
    {{#if this.source_dataset}}
    Source dataset
    {{this.source_dataset}}
    {{else}} {{#if this.source_table}}
    Source dataset
    {{this.source_table}}
    {{/if}} {{/if}} {{#if this.source_columns}}
    Source columns
    {{#each this.source_columns}} {{this}} {{/each}}
    {{/if}} {{#if this.source_column_defs}}
    Column definitions
      {{#each this.source_column_defs}}
    • {{this.column_name}} — {{#if this.business_definition}}{{this.business_definition}}{{else}}(definition not yet curated){{/if}}
    • {{/each}}
    {{/if}}
  • {{/each}}
{{/if}}
{{/if}} {{#if feature_deviation}}
Vs. training population

How this customer compares

Bars show z-score vs. the training population (capped at ±3σ). Use as a reality-check on the SHAP drivers above — does the model lean on features where the customer actually deviates?

    {{#each feature_deviation}}
  • {{this.feature_name}} {{fmt_float this.feature_value 3}} {{fmt_signed_z this.z}}
  • {{/each}}
{{/if}}
{{#if recommended}}✓{{else}}◎{{/if}} {{#if recommended}}Recommended action{{else}}{{#if is_holdout}}Holdout{{else}}Not recommended{{/if}}{{/if}} {{playbook_name}} {{#if expected_uplift_pct}}Expected uplift · {{fmt_pct expected_uplift_pct}}{{/if}}
{{#if playbook_description}}

{{playbook_description}}

{{/if}} {{#if playbook_when_applicable}}
When this play helps
{{playbook_when_applicable}}
{{/if}} {{#if playbook_time_zero_definition}}
Time-zero definition
{{playbook_time_zero_definition}}
{{/if}} {{#if playbook_analysis_population_rule}}
Analysis population
{{playbook_analysis_population_rule}}
{{/if}} {{#if alternate_playbooks}}
Other applicable playbooks
{{#each alternate_playbooks}} {{this.playbook_name}} {{#if this.fit_score}}{{fmt_pct this.fit_score}} match{{/if}} {{#if this.expected_uplift_pct}}+{{fmt_pct this.expected_uplift_pct}}{{/if}} {{/each}}
{{/if}}
Archetype {{archetype_name}} {{#if policy_fit_score}}{{fmt_pct policy_fit_score}} match{{/if}} {{#if policy_fit_tier}}{{fit_tier_label policy_fit_tier}}{{/if}} {{#if archetype_cluster_size}}{{fmt_int archetype_cluster_size}} customers{{/if}} {{#if archetype_mean_churn_probability}}avg {{fmt_pct archetype_mean_churn_probability}} churn{{/if}}
{{#if archetype_description}}
Description
{{archetype_description}}
{{/if}} {{#if archetype_rationale}}
Why this customer matches
{{archetype_rationale}}
{{/if}} {{#if policy_rationale}}
Policy rationale
{{policy_rationale}}
{{/if}} {{#if eligibility_evidence}}
Evidence on this customer
{{eligibility_evidence}}
{{/if}}
Technical details
{{#if archetype_feature_thresholds}}
Feature thresholds
{{archetype_feature_thresholds}}
{{/if}} {{#if policy_eligibility_rules_prose}}
Eligibility rules · prose
{{policy_eligibility_rules_prose}}
{{/if}} {{#if eligibility_rules_sql}}
Eligibility predicate · SQL
{{eligibility_rules_sql}}
{{/if}}