初始提交:飞球 ETL 系统全量代码

This commit is contained in:
Neo
2026-02-13 08:05:34 +08:00
commit 3c51f5485d
441 changed files with 117631 additions and 0 deletions

3688
docs/index/DWS指数.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,88 @@
param_id,index_type,param_name,param_value,description,effective_from,effective_to,created_at,updated_at
15,INTIMACY,amount_base,500.000000,amount compression base,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
26,INTIMACY,burst_gamma,0.600000,burst gamma,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
29,INTIMACY,ewma_alpha,0.200000,EWMA alpha,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
18,INTIMACY,halflife_last,10.000000,last-contact half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
21,INTIMACY,halflife_long,30.000000,long-term burst half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
19,INTIMACY,halflife_recharge,21.000000,recharge half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
17,INTIMACY,halflife_session,14.000000,session half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
20,INTIMACY,halflife_short,7.000000,short-term burst half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
16,INTIMACY,incentive_weight,1.500000,incentive multiplier,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
12,INTIMACY,lookback_days,60.000000,lookback window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
27,INTIMACY,percentile_lower,5.000000,lower percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
28,INTIMACY,percentile_upper,95.000000,upper percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
14,INTIMACY,recharge_attribute_hours,1.000000,recharge attribution window (hours),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
13,INTIMACY,session_merge_hours,4.000000,session merge gap (hours),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
25,INTIMACY,weight_duration,0.500000,duration weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
22,INTIMACY,weight_frequency,2.000000,frequency weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
23,INTIMACY,weight_recency,1.500000,recency weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
24,INTIMACY,weight_recharge,2.000000,recharge weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
75,NCI,active_new_penalty,0.200000,active-new suppression multiplier,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
74,NCI,active_new_recency_days,7.000000,active-new recency window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
73,NCI,active_new_visit_threshold_14d,2.000000,active-new threshold in 14d visits,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
77,NCI,amount_base_M0,300.000000,spend log base M0,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
78,NCI,balance_base_B0,500.000000,balance log base B0,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
62,NCI,compression_mode,0.000000,compression mode,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
85,NCI,enable_stop_high_balance_exception,0.000000,enable high-balance STOP exception,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
61,NCI,ewma_alpha,0.200000,EWMA alpha,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
76,NCI,h_recharge,7.000000,recharge decay half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
86,NCI,high_balance_threshold,1000.000000,high-balance threshold,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
57,NCI,lookback_days_recency,60.000000,recency lookback window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
65,NCI,new_days_threshold,30.000000,new member days threshold,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
67,NCI,new_recharge_max_visits,10.000000,max visits for new-recharge grouping,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
64,NCI,new_visit_threshold,2.000000,new member visit threshold,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
68,NCI,no_touch_days_new,3.000000,no-touch threshold (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
59,NCI,percentile_lower,5.000000,lower percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
60,NCI,percentile_upper,95.000000,upper percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
66,NCI,recharge_recent_days,14.000000,recent recharge window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
71,NCI,salvage_end,60.000000,salvage decay end day,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
70,NCI,salvage_start,30.000000,salvage decay start day,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
69,NCI,t2_target_days,7.000000,second-visit target window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
63,NCI,use_smoothing,1.000000,enable smoothing,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
80,NCI,value_w_bal,0.800000,value weight for balance,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
79,NCI,value_w_spend,1.000000,value weight for spend,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
58,NCI,visit_lookback_days,180.000000,visit history lookback (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
82,NCI,w_need,1.600000,need weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
83,NCI,w_re,0.800000,recharge pressure weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
84,NCI,w_value,1.000000,value weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
81,NCI,w_welcome,1.000000,welcome-stage weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
72,NCI,welcome_window_days,3.000000,welcome outreach window for first touch (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
11,RECALL,ewma_alpha,0.200000,EWMA alpha,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
3,RECALL,halflife_new,7.000000,new member half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
4,RECALL,halflife_recharge,10.000000,recharge half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
1,RECALL,lookback_days,60.000000,recall lookback window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
9,RECALL,percentile_lower,5.000000,lower percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
10,RECALL,percentile_upper,95.000000,upper percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
2,RECALL,sigma_min,2.000000,minimum sigma for volatility,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
8,RECALL,weight_hot,1.000000,hotness weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
6,RECALL,weight_new,1.000000,new member weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
5,RECALL,weight_overdue,3.000000,overdue weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
7,RECALL,weight_recharge,1.000000,recharge weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
47,WBI,amount_base_M0,300.000000,spend log base M0,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
48,WBI,balance_base_B0,500.000000,balance log base B0,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
35,WBI,compression_mode,0.000000,compression mode,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
55,WBI,enable_stop_high_balance_exception,0.000000,enable high-balance STOP exception,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
34,WBI,ewma_alpha,0.200000,EWMA alpha,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
46,WBI,h_recharge,7.000000,recharge decay half-life (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
56,WBI,high_balance_threshold,1000.000000,high-balance threshold,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
30,WBI,lookback_days_recency,60.000000,recency lookback window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
38,WBI,new_days_threshold,30.000000,new member days threshold,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
40,WBI,new_recharge_max_visits,10.000000,max visits for new-recharge grouping,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
37,WBI,new_visit_threshold,2.000000,new member visit threshold,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
45,WBI,overdue_alpha,2.000000,overdue fallback alpha,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
88,WBI,overdue_weight_blend_min_samples,8.000000,minimum samples to fully trust weighted overdue CDF,2026-02-07,,2026-02-07 18:06:47.706821+08:00,2026-02-07 18:06:47.706821+08:00
87,WBI,overdue_weight_halflife_days,30.000000,overdue weighted-CDF interval half-life (days),2026-02-07,,2026-02-07 18:06:47.706821+08:00,2026-02-07 18:06:47.706821+08:00
32,WBI,percentile_lower,5.000000,lower percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
33,WBI,percentile_upper,95.000000,upper percentile,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
42,WBI,recency_gate_days,14.000000,recency suppression gate center (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
43,WBI,recency_gate_slope_days,3.000000,recency suppression slope (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
41,WBI,recency_hard_floor_days,14.000000,hard floor for winback recency (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
39,WBI,recharge_recent_days,14.000000,recent recharge window (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
36,WBI,use_smoothing,1.000000,enable smoothing,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
50,WBI,value_w_bal,1.000000,value weight for balance,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
49,WBI,value_w_spend,1.000000,value weight for spend,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
31,WBI,visit_lookback_days,180.000000,visit history lookback (days),2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
52,WBI,w_drop,1.000000,drop weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
51,WBI,w_over,2.000000,overdue weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
53,WBI,w_re,0.400000,recharge pressure weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
54,WBI,w_value,1.200000,value weight,2026-02-06,,2026-02-06 23:14:39.707810+08:00,2026-02-06 23:14:39.707810+08:00
1 param_id index_type param_name param_value description effective_from effective_to created_at updated_at
2 15 INTIMACY amount_base 500.000000 amount compression base 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
3 26 INTIMACY burst_gamma 0.600000 burst gamma 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
4 29 INTIMACY ewma_alpha 0.200000 EWMA alpha 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
5 18 INTIMACY halflife_last 10.000000 last-contact half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
6 21 INTIMACY halflife_long 30.000000 long-term burst half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
7 19 INTIMACY halflife_recharge 21.000000 recharge half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
8 17 INTIMACY halflife_session 14.000000 session half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
9 20 INTIMACY halflife_short 7.000000 short-term burst half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
10 16 INTIMACY incentive_weight 1.500000 incentive multiplier 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
11 12 INTIMACY lookback_days 60.000000 lookback window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
12 27 INTIMACY percentile_lower 5.000000 lower percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
13 28 INTIMACY percentile_upper 95.000000 upper percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
14 14 INTIMACY recharge_attribute_hours 1.000000 recharge attribution window (hours) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
15 13 INTIMACY session_merge_hours 4.000000 session merge gap (hours) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
16 25 INTIMACY weight_duration 0.500000 duration weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
17 22 INTIMACY weight_frequency 2.000000 frequency weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
18 23 INTIMACY weight_recency 1.500000 recency weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
19 24 INTIMACY weight_recharge 2.000000 recharge weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
20 75 NCI active_new_penalty 0.200000 active-new suppression multiplier 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
21 74 NCI active_new_recency_days 7.000000 active-new recency window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
22 73 NCI active_new_visit_threshold_14d 2.000000 active-new threshold in 14d visits 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
23 77 NCI amount_base_M0 300.000000 spend log base M0 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
24 78 NCI balance_base_B0 500.000000 balance log base B0 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
25 62 NCI compression_mode 0.000000 compression mode 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
26 85 NCI enable_stop_high_balance_exception 0.000000 enable high-balance STOP exception 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
27 61 NCI ewma_alpha 0.200000 EWMA alpha 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
28 76 NCI h_recharge 7.000000 recharge decay half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
29 86 NCI high_balance_threshold 1000.000000 high-balance threshold 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
30 57 NCI lookback_days_recency 60.000000 recency lookback window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
31 65 NCI new_days_threshold 30.000000 new member days threshold 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
32 67 NCI new_recharge_max_visits 10.000000 max visits for new-recharge grouping 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
33 64 NCI new_visit_threshold 2.000000 new member visit threshold 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
34 68 NCI no_touch_days_new 3.000000 no-touch threshold (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
35 59 NCI percentile_lower 5.000000 lower percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
36 60 NCI percentile_upper 95.000000 upper percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
37 66 NCI recharge_recent_days 14.000000 recent recharge window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
38 71 NCI salvage_end 60.000000 salvage decay end day 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
39 70 NCI salvage_start 30.000000 salvage decay start day 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
40 69 NCI t2_target_days 7.000000 second-visit target window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
41 63 NCI use_smoothing 1.000000 enable smoothing 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
42 80 NCI value_w_bal 0.800000 value weight for balance 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
43 79 NCI value_w_spend 1.000000 value weight for spend 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
44 58 NCI visit_lookback_days 180.000000 visit history lookback (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
45 82 NCI w_need 1.600000 need weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
46 83 NCI w_re 0.800000 recharge pressure weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
47 84 NCI w_value 1.000000 value weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
48 81 NCI w_welcome 1.000000 welcome-stage weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
49 72 NCI welcome_window_days 3.000000 welcome outreach window for first touch (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
50 11 RECALL ewma_alpha 0.200000 EWMA alpha 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
51 3 RECALL halflife_new 7.000000 new member half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
52 4 RECALL halflife_recharge 10.000000 recharge half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
53 1 RECALL lookback_days 60.000000 recall lookback window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
54 9 RECALL percentile_lower 5.000000 lower percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
55 10 RECALL percentile_upper 95.000000 upper percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
56 2 RECALL sigma_min 2.000000 minimum sigma for volatility 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
57 8 RECALL weight_hot 1.000000 hotness weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
58 6 RECALL weight_new 1.000000 new member weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
59 5 RECALL weight_overdue 3.000000 overdue weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
60 7 RECALL weight_recharge 1.000000 recharge weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
61 47 WBI amount_base_M0 300.000000 spend log base M0 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
62 48 WBI balance_base_B0 500.000000 balance log base B0 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
63 35 WBI compression_mode 0.000000 compression mode 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
64 55 WBI enable_stop_high_balance_exception 0.000000 enable high-balance STOP exception 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
65 34 WBI ewma_alpha 0.200000 EWMA alpha 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
66 46 WBI h_recharge 7.000000 recharge decay half-life (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
67 56 WBI high_balance_threshold 1000.000000 high-balance threshold 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
68 30 WBI lookback_days_recency 60.000000 recency lookback window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
69 38 WBI new_days_threshold 30.000000 new member days threshold 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
70 40 WBI new_recharge_max_visits 10.000000 max visits for new-recharge grouping 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
71 37 WBI new_visit_threshold 2.000000 new member visit threshold 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
72 45 WBI overdue_alpha 2.000000 overdue fallback alpha 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
73 88 WBI overdue_weight_blend_min_samples 8.000000 minimum samples to fully trust weighted overdue CDF 2026-02-07 2026-02-07 18:06:47.706821+08:00 2026-02-07 18:06:47.706821+08:00
74 87 WBI overdue_weight_halflife_days 30.000000 overdue weighted-CDF interval half-life (days) 2026-02-07 2026-02-07 18:06:47.706821+08:00 2026-02-07 18:06:47.706821+08:00
75 32 WBI percentile_lower 5.000000 lower percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
76 33 WBI percentile_upper 95.000000 upper percentile 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
77 42 WBI recency_gate_days 14.000000 recency suppression gate center (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
78 43 WBI recency_gate_slope_days 3.000000 recency suppression slope (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
79 41 WBI recency_hard_floor_days 14.000000 hard floor for winback recency (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
80 39 WBI recharge_recent_days 14.000000 recent recharge window (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
81 36 WBI use_smoothing 1.000000 enable smoothing 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
82 50 WBI value_w_bal 1.000000 value weight for balance 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
83 49 WBI value_w_spend 1.000000 value weight for spend 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
84 31 WBI visit_lookback_days 180.000000 visit history lookback (days) 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
85 52 WBI w_drop 1.000000 drop weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
86 51 WBI w_over 2.000000 overdue weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
87 53 WBI w_re 0.400000 recharge pressure weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00
88 54 WBI w_value 1.200000 value weight 2026-02-06 2026-02-06 23:14:39.707810+08:00 2026-02-06 23:14:39.707810+08:00

View File

@@ -0,0 +1,392 @@
# 指数算法说明(代码对齐版)
本文根据当前代码实现整理包含老客挽回指数WBI、新客转化指数NCI与关系指数RS/OS/MS/ML的计算流程、参数含义、归一化逻辑与用途说明。
如需业务版本(非代码版)说明,请另行补充。
## 0. 版本更新2026-02-08
1. 关系指数从旧 `INTIMACY` 切换为单任务 `RelationIndexTask`,统一产出 `RS/OS/MS/ML`
2. `ML` 口径调整为人工台账唯一真源(`dws_ml_manual_order_alloc`)。
3. `dwd_recharge_order` 的 last-touch 仅保留备用路径,默认关闭(`ML.source_mode=0`)。
4. `BaseIndexTask` 已支持按 `index_type` 隔离参数缓存与分位平滑历史,避免单任务串参。
## 1. 通用约定
1) **时间口径**
-`datetime.now(self.tz)` 为"当前时间"基准。
- 窗口仅回溯 **近 60 天**`lookback_days`)。
2) **天数截断**
- 所有"天数差"在参与衰减或间隔计算时,都会被截断到 `<= lookback_days`(默认 60 天)。
3) **半衰期衰减**
```
decay(d; h) = exp(-ln(2) * d / h)
```
- `d` 为距今天数,`h` 为半衰期(天)。
- `d=0` 时权重 1.0`d=h` 时权重 0.5。
4) **010 映射Raw → Display**
- 取全体 Raw 分数,计算 `P5/P95`
- 对 Raw 进行 **Winsorize** 截断到 `[P5, P95]`
- 可选压缩:`none / log1p / asinh`
- MinMax 映射到 `[0, 10]`
- 若范围过小(分母 < 1e-6直接返回 5.0。
- 最终展示分数保留两位小数。
5) **分位点平滑(可选)**
-`use_smoothing=1` 且存在历史分位点:
`Q_t = (1-α) * Q_{t-1} + α * Q_now`
- `α` 来自参数 `ewma_alpha`(默认 0.2)。
> 以上逻辑由 `BaseIndexTask` 提供。
---
## 2. 老客挽回指数WBI
### 2.0 作用/业务场景
- 识别需要重点“唤回”的老客,并给出可排序的优先级分数。
- 综合超期、降频、充值未回访与价值信号,衡量“召回紧迫度 + 价值潜力”。
- 结果通常用于运营触达/回访任务优先级与名单筛选。
### 2.1 数据来源与口径
- **到店记录**`billiards_dwd.dwd_settlement_head`
条件:`site_id``member_id > 0``settle_type=1`
`settle_type=3` 且关联 `dwd_assistant_service_log`**附加课/奖励课(BONUS)**
使用 `pay_time` 作为到店/服务结束时间(按天去重)。
- **充值记录**`billiards_dwd.dwd_recharge_order`
条件:`site_id``member_id > 0``settle_type=5`,取最近充值时间(回溯 60 天)。
- **会员档案**`billiards_dwd.dim_member.create_time`
- **储值卡余额**`billiards_dwd.dim_member_card_account.balance`
口径:现金储值卡 `card_type_id=2793249295533893`
> 计算窗口:到店历史取近 180 天recency 按 60 天封顶。
### 2.2 特征与分流
- `t_v = min(lookback_days_recency, days_since_last_visit)`
- `t_r = min(lookback_days_recency, days_since_last_recharge)`
- `t_a = min(t_v, t_r)`
- `visits_14d / visits_60d / visits_total(近 180 天)`
- `spend_30d / spend_180d`:按 `pay_amount`(实付)汇总
- 到店间隔:按天计算并封顶到 `lookback_days_recency`;同时记录间隔的“距今年龄”用于加权 CDF
- `recharge_unconsumed`:最近一次充值晚于最近一次到店(或无到店)时为 1
**分流规则:**
- STOP`t_a >= lookback_days_recency`(默认不写入;高余额例外可选)
- STOP_HIGH_BALANCE`enable_stop_high_balance_exception=1``sv_balance >= high_balance_threshold` 时,仍进入 WBI 计算
- NEW`visits_total <= new_visit_threshold`
`days_since_first_visit <= new_days_threshold`
`recharge_unconsumed=1``days_since_last_recharge <= recharge_recent_days`
- OLD非 STOP 且非 NEW
### 2.3 分项得分
**Overdue个人周期超期分**
基于加权经验 CDF
```
p = weighted_cdf(intervals, t_v, halflife_days, blend_min_samples)
overdue = p ^ alpha
```
- 加权 CDF 使用半衰期对历史间隔加权,近期间隔权重更高
- 若无历史间隔数据,`p = 0.5`
- 同时计算理想回访间隔(加权中位数),用于推算理想下次到店日期
**Drop近期降频**
```
expected14 = visits_60d * 14/60
drop = clip((expected14 - visits_14d) / (expected14 + 1), 0, 1)
```
**Recharge充值未回访压力**
```
recharge = decay(t_r; h_recharge) if recharge_unconsumed=1 else 0
```
**Value价值**
```
S_spend = ln(1 + spend_180d / M0)
S_bal = ln(1 + sv_balance / B0)
value = w_spend * S_spend + w_bal * S_bal
```
### 2.4 Raw Score
```
WBI_raw = w_over * overdue
+ w_drop * drop
+ w_re * recharge
+ w_value * value
```
**Recency suppression近访抑制**
```
suppression = sigmoid((t_v - recency_gate_days) / recency_gate_slope_days)
WBI_raw = WBI_raw * suppression
```
- Hard floor硬门槛
```
if t_v < recency_hard_floor_days: suppression = 0
```
- 默认:`recency_gate_days=14``recency_gate_slope_days=3`
- 默认:`recency_hard_floor_days=14`
-`recency_gate_slope_days <= 0` 时,退化为硬门槛:`t_v < recency_gate_days => suppression=0`
- 限制在 0 以上
### 2.5 输出表
`billiards_dws.dws_member_winback_index`
### 2.6 WBI 默认参数
| 参数 | 默认值 | 含义 |
|---|---:|---|
| `lookback_days_recency` | 60 | recency 窗口(天) |
| `visit_lookback_days` | 180 | 到店历史窗口(天) |
| `overdue_alpha` | 2.0 | 超期分幂次 |
| `overdue_weight_halflife_days` | 30 | 加权 CDF 半衰期 |
| `overdue_weight_blend_min_samples` | 8 | 加权/等权混合最小样本 |
| `h_recharge` | 7 | 充值衰减半衰期 |
| `amount_base_M0` | 300 | 消费压缩基数 |
| `balance_base_B0` | 500 | 余额压缩基数 |
| `w_over` | 2.0 | 超期分权重 |
| `w_drop` | 1.0 | 降频分权重 |
| `w_re` | 0.4 | 充值分权重 |
| `w_value` | 1.2 | 价值分权重 |
| `recency_gate_days` | 14 | 近访抑制门槛 |
| `recency_gate_slope_days` | 3 | 近访抑制斜率 |
| `recency_hard_floor_days` | 14 | 硬门槛天数 |
| `new_visit_threshold` | 2 | 新客到店次数阈值 |
| `new_days_threshold` | 30 | 新客建档天数阈值 |
---
## 3. 新客转化指数NCI
### 3.0 作用/业务场景
- 识别新客的“欢迎建联”与“转化召回”优先级。
- 兼顾首访后快速触达与二访转化窗口,避免对近期活跃新客过度打扰。
- 结果通常用于新客欢迎、转化跟进与触达节奏排序。
### 3.1 数据来源与口径
- 使用 `MemberIndexBaseTask` 的共享口径,与 WBI 完全一致(到店/充值/会员档案/余额、`t_v/t_r/t_a``visits_*``spend_*``recharge_unconsumed` 等)。
- 适用对象:仅 NEW 分群(分流规则见 2.2)。
### 3.2 关键分项
**Need转化紧迫度**
```
t2_max = 2 * t2_target_days
Need = clip((t_v - no_touch_days_new) / (t2_max - no_touch_days_new), 0, 1)
```
**Salvage可救度**
```
if t_a <= salvage_start: 1
elif t_a >= salvage_end: 0
else: (salvage_end - t_a) / (salvage_end - salvage_start)
```
**Recharge充值未回访压力** 同 WBI
**Value价值** 同 WBI权重可不同
### 3.3 Raw Score含欢迎建联与活跃抑制
新增逻辑:
- `Welcome`:仅首访/单访新客在 `welcome_window_days` 内触发,越接近当天分越高。
- `active_multiplier`若新客近14天来店次数较高且最近仍活跃则用 `active_new_penalty` 抑制转化召回分。
- `touch_multiplier``t_v` 未达到 `no_touch_days_new` 前,`Recharge/Value` 贡献按比例衰减,减少"刚来过就高分"。
```
NCI_raw = w_welcome * Welcome
+ active_multiplier * (
w_need * (Need * Salvage)
+ w_re * Recharge * touch_multiplier
+ w_value * Value * touch_multiplier
)
```
NCI 额外提供三个维度的展示分:`display_score`(总分)、`display_score_welcome`(欢迎分)、`display_score_convert`(转化分)。
### 3.4 输出表
`billiards_dws.dws_member_newconv_index`
### 3.5 NCI 默认参数
| 参数 | 默认值 | 含义 |
|---|---:|---|
| `no_touch_days_new` | 3 | 免打扰天数 |
| `t2_target_days` | 7 | 目标回访天数 |
| `salvage_start` | 30 | 可救度开始衰减天数 |
| `salvage_end` | 60 | 可救度归零天数 |
| `welcome_window_days` | 3 | 欢迎窗口(天) |
| `active_new_visit_threshold_14d` | 2 | 活跃抑制到店阈值 |
| `active_new_recency_days` | 7 | 活跃抑制近期天数 |
| `active_new_penalty` | 0.2 | 活跃抑制系数 |
| `w_welcome` | 1.0 | 欢迎分权重 |
| `w_need` | 1.6 | 紧迫度权重 |
| `w_re` | 0.8 | 充值分权重 |
| `w_value` | 1.0 | 价值分权重 |
---
## 4. 亲密指数INTIMACY
### 4.0 作用/业务场景
- 衡量客户与助教的关系强度与“近期温度”。
- 用于助教约课精力分配、客户-助教匹配与成功率预估等排序参考。
- 结果以 010 展示分提供横向比较。
### 4.1 数据来源与口径
- **服务记录**`billiards_dwd.dwd_assistant_service_log`
条件:`site_id``tenant_member_id > 0``is_delete = 0``user_id > 0`
时间口径:`last_use_time` 在近 `lookback_days` 天内
- **助教维度**`billiards_dwd.dim_assistant`
通过 `user_id` 关联获取 `assistant_id``scd2_is_current=1`
- **充值记录**`billiards_dwd.dwd_recharge_order`
条件:`settle_type = 5``pay_time >= now - lookback_days`
- 计算粒度为 `(member_id, assistant_id)`
### 4.2 会话合并
`(member_id, assistant_id)` 分组,按 `start_use_time` 排序:
- **间隔 ≤ session_merge_hours**(默认 4 小时)视为同一会话
- 合并后:
- `session_end` 取最大结束时间
- `duration` 累加
- `course_weight` 取最大值(附加课权重更高)
- `is_incentive` 取 OR
- 课型权重:
- `BONUS``incentive_weight`(默认 1.5
- 其他:权重 1.0
### 4.3 归因充值
`dwd_recharge_order` 取近 `lookback_days` 天充值记录(`settle_type=5`
- 若充值发生在某会话结束后的 **recharge_attribute_hours**(默认 1 小时)内,归因为该助教
- 单笔充值在该 `(member_id, assistant_id)` 对内只计一次
### 4.4 分项得分
所有 `days_ago` 均截断到 `<= lookback_days`
**F频次强度**
```
F = Σ( τ_i * decay(days_ago_i; h_sess) )
```
**R最近温度**
```
R = decay(min(d_last, lookback_days); h_last)
```
**M归因充值强度**
```
M = Σ( ln(1 + amt/A0) * decay(min(days_ago, lookback_days); h_pay) )
```
**D时长贡献**
```
D = Σ( sqrt(dur_hours) * τ_i * decay(days_ago_i; h_sess) )
```
**burst频率激增放大**
```
F_short = Σ( τ_i * decay(days_ago_i; h_short) )
F_long = Σ( τ_i * decay(days_ago_i; h_long) )
ratio = F_short / (F_long + 1e-6)
burst = max(0, ln(1 + (ratio - 1)))
mult = 1 + γ * burst
```
### 4.5 Raw Score 与 Display Score
```
INTIMACY_raw = (w_F*F + w_R*R + w_M*M + w_D*D) * mult
```
Display Score 使用 `BaseIndexTask` 的分位截断 + 压缩 + MinMax 映射到 010并可选 EWMA 平滑(见第 1/5 节通用说明)。
### 4.6 输出字段
写入表:`billiards_dws.dws_member_assistant_intimacy`,主要字段:
- 会话统计:`session_count``total_duration_minutes``basic_session_count``incentive_session_count`
- 最近与充值:`days_since_last_session``attributed_recharge_count``attributed_recharge_amount`
- 分项得分:`score_frequency``score_recency``score_recharge``score_duration``burst_multiplier`
- 汇总:`raw_score``display_score`
### 4.7 INTIMACY 默认参数
| 参数 | 默认值 | 含义 |
|---|---:|---|
| `lookback_days` | 60 | 回看窗口(天) |
| `session_merge_hours` | 4 | 会话合并间隔(小时) |
| `recharge_attribute_hours` | 1 | 充值归因窗口(小时) |
| `amount_base` | 500 | 充值强度压缩基数 |
| `incentive_weight` | 1.5 | 附加课权重 |
| `halflife_session` | 14 | 会话衰减半衰期 |
| `halflife_last` | 10 | 最近服务衰减半衰期 |
| `halflife_recharge` | 21 | 充值衰减半衰期 |
| `halflife_short` | 7 | 短期频次半衰期 |
| `halflife_long` | 30 | 长期频次半衰期 |
| `weight_frequency` | 2.0 | F 权重 |
| `weight_recency` | 1.5 | R 权重 |
| `weight_recharge` | 2.0 | M 权重 |
| `weight_duration` | 0.5 | D 权重 |
| `burst_gamma` | 0.6 | 激增放大系数 |
| `percentile_lower` | 5 | 下分位P5 |
| `percentile_upper` | 95 | 上分位P95 |
| `compression_mode` | 1 | 压缩方式1=log1p |
| `use_smoothing` | 1 | 是否启用 EWMA |
| `ewma_alpha` | 0.2 | 分位平滑系数 |
---
## 5. 映射与参数配置
### 5.1 映射流程
1) 计算 Raw Score
2) 计算 P5/P95
3) Winsorize 截断
4) 可选压缩(`none/log1p/asinh`
5) MinMax → `[0, 10]`
6) 可选 EWMA 平滑(`use_smoothing` + `ewma_alpha`
### 5.2 参数来源
参数来自 `billiards_dws.cfg_index_parameters`,按 `index_type` 加载,默认值见代码:
- **WBI 关键参数**`lookback_days_recency``overdue_alpha``overdue_weight_halflife_days``h_recharge``w_over/w_drop/w_re/w_value`
- **NCI 关键参数**`no_touch_days_new``t2_target_days``salvage_start/end``w_welcome/w_need/w_re/w_value`
- **INTIMACY 关键参数**`halflife_session/last/recharge/short/long``amount_base``incentive_weight``weight_*``burst_gamma`
- **通用参数**`percentile_lower/upper``compression_mode``use_smoothing``ewma_alpha`
`compression_mode` 取值:
- `0`:不压缩
- `1`log1p
- `2`asinh
### 5.3 参数优先级
- 先用代码默认参数(`DEFAULT_PARAMS`
- 再用数据库参数覆盖(`cfg_index_parameters`,取 `effective_from <= CURRENT_DATE` 且未过期,同名参数取最近生效的一条)
- GUI/环境变量可通过 `run.index_lookback_days` 覆盖 recency 窗口
即:**GUI/环境变量 > DB > 代码默认值**。
---
## 6. 运行与覆盖策略
- WBI/NCI默认"每 2 小时"计算(由任务描述定义)
- INTIMACY默认"每 4 小时"计算(由任务描述定义)
- 写入方式:对本次参与计算的实体进行 **delete-before-insert** 覆盖写入
(不在窗口内的实体不会被重算)

328
docs/index/index_tables.md Normal file
View File

@@ -0,0 +1,328 @@
# Index Tables
Generated at: 2026-02-06 23:15:35
## 1) WBI
| member_name | wbi | raw_score | t_v | visits_14d | sv_balance |
|---|---:|---:|---:|---:|---:|
| 清 | 10.00 | 5.026516 | 31.00 | 0 | 1944.76 |
| 陈德韩 | 10.00 | 5.762521 | 46.00 | 0 | 20.11 |
| 林总 | 10.00 | 5.783089 | 23.00 | 0 | 15617.70 |
| 刘哥 | 10.00 | 5.159391 | 48.00 | 0 | 371.51 |
| T | 9.38 | 4.712542 | 48.00 | 0 | 0.00 |
| 昌哥 | 8.75 | 4.395994 | 30.00 | 0 | 2374.99 |
| 林先生 | 8.74 | 4.391232 | 39.00 | 0 | 0.00 |
| 王先生 | 7.83 | 3.933276 | 32.00 | 0 | 0.00 |
| 黄先生 | 7.55 | 3.792699 | 28.00 | 0 | 0.00 |
| 桂先生 | 7.04 | 3.540387 | 51.00 | 0 | 0.00 |
| 孟紫龙 | 6.94 | 3.486349 | 40.00 | 0 | 0.00 |
| 候 | 6.41 | 3.220067 | 50.00 | 0 | 0.00 |
| 周先生 | 6.39 | 3.214255 | 17.00 | 0 | 0.00 |
| 郑先生 | 6.18 | 3.108184 | 56.00 | 0 | 0.00 |
| 小熊 | 5.99 | 3.010369 | 20.00 | 0 | 0.00 |
| 阿亮 | 5.76 | 2.893061 | 27.00 | 0 | 612.33 |
| 胡总 | 5.74 | 2.884418 | 40.00 | 0 | 0.00 |
| 张先生 | 5.42 | 2.724779 | 49.00 | 0 | 0.00 |
| 游 | 4.91 | 2.466520 | 55.00 | 0 | 0.00 |
| 方先生 | 4.80 | 2.411724 | 47.00 | 0 | 0.00 |
| 罗先生 | 4.66 | 2.342436 | 26.00 | 0 | 46.67 |
| 李先生 | 4.45 | 2.236351 | 36.00 | 0 | 417.63 |
| 孙启明 | 4.36 | 2.189163 | 48.00 | 0 | 0.00 |
| 黄国磊 | 4.36 | 2.189715 | 56.00 | 0 | 0.22 |
| 李 | 4.35 | 2.188996 | 42.00 | 0 | 0.00 |
| 老宋 | 4.34 | 2.179315 | 41.00 | 0 | 2126.14 |
| 张丹逸 | 3.57 | 1.796883 | 26.00 | 0 | 0.00 |
| 黄先生 | 3.28 | 1.647760 | 51.00 | 0 | 4.01 |
| 林先生 | 3.02 | 1.516311 | 19.00 | 0 | 1.58 |
| 罗超 | 2.34 | 1.176384 | 18.00 | 0 | 0.00 |
| 卢广贤 | 2.06 | 1.033531 | 20.00 | 0 | 0.00 |
| 陈 | 1.37 | 0.688561 | 35.00 | 0 | 0.00 |
| 陈先生 | 1.07 | 0.537345 | 29.00 | 0 | 170.32 |
| 魏先生 | 0.85 | 0.427303 | 28.00 | 0 | 84.51 |
| 刘女士 | 0.38 | 0.188721 | 32.00 | 0 | 0.00 |
| 陈淑涛 | 0.00 | 0.000000 | 5.00 | 1 | 0.00 |
| 肖先生 | 0.00 | 0.000000 | 10.00 | 1 | 0.00 |
| 李先生 | 0.00 | 0.000000 | 11.00 | 1 | 2433.01 |
| 林先生 | 0.00 | 0.000000 | 6.00 | 1 | 0.00 |
| 陈小姐 | 0.00 | 0.000000 | 8.00 | 1 | 511.97 |
| 周周 | 0.00 | 0.000000 | 10.00 | 1 | 31.06 |
| 曾先生 | 0.00 | 0.000000 | 11.00 | 1 | 303.19 |
| 明哥 | 0.00 | 0.000000 | 7.00 | 3 | 559.16 |
| 唐先生 | 0.00 | 0.000000 | 12.00 | 1 | 0.00 |
| 曾巧明 | 0.00 | 0.000000 | 7.00 | 3 | 0.00 |
| 黄生 | 0.00 | 0.000000 | 2.00 | 5 | 0.00 |
| 叶先生 | 0.00 | 0.000000 | 12.00 | 1 | 0.00 |
| 谢俊 | 0.00 | 0.000000 | 2.00 | 5 | 0.00 |
| 吴生 | 0.00 | 0.000000 | 7.00 | 2 | 3680.65 |
| 艾宇民 | 0.00 | 0.000000 | 2.00 | 4 | 0.00 |
| 潘先生 | 0.00 | 0.000000 | 10.00 | 1 | 0.00 |
| 林志铭 | 0.00 | 0.000000 | 13.00 | 1 | 795.66 |
| 王龙 | 0.00 | 0.000000 | 13.00 | 1 | 0.00 |
| 陈腾鑫 | 0.00 | 0.000000 | 9.00 | 2 | 0.00 |
| 蔡总 | 0.00 | 0.000000 | 6.00 | 2 | 2016.18 |
| 小燕 | 0.00 | 0.000000 | 1.00 | 9 | 768.66 |
| 张先生 | 0.00 | 0.000000 | 3.00 | 7 | 920.18 |
| 葛先生 | 0.00 | 0.000000 | 1.00 | 14 | 3675.52 |
| 李先生 | 0.00 | 0.000000 | 4.00 | 1 | 0.00 |
| 轩哥 | 0.00 | 0.000000 | 3.00 | 6 | 4197.91 |
| 陈先生 | 0.00 | 0.000000 | 7.00 | 2 | 903.82 |
| 范先生 | 0.00 | 0.000000 | 4.00 | 2 | 0.00 |
| 常总 | 0.00 | 0.000000 | 2.00 | 3 | 1678.15 |
| 梅 | 0.00 | 0.000000 | 3.00 | 2 | 2050.00 |
| 江先生 | 0.00 | 0.000000 | 6.00 | 1 | 589.66 |
| 曾丹烨 | 0.00 | 0.000000 | 2.00 | 7 | 3535.39 |
| 罗先生 | 0.00 | 0.000000 | 4.00 | 4 | 0.00 |
| 胡先生 | 0.00 | 0.000000 | 4.00 | 3 | 0.00 |
| 柳先生 | 0.00 | 0.000000 | 5.00 | 1 | 163.02 |
| 陈泽斌 | 0.00 | 0.000000 | 5.00 | 1 | 0.00 |
Total rows: 70
## 2) NCI
| member_name | nci | welcome | convert | raw_total | raw_welcome | raw_convert | t_v | visits_14d |
|---|---:|---:|---:|---:|---:|---:|---:|---:|
| 章先生 | 10.00 | 0.00 | 10.00 | 3.034138 | 0.000000 | 3.034138 | 20.00 | 0 |
| 吴先生 | 8.39 | 0.00 | 8.39 | 2.555549 | 0.000000 | 2.555549 | 60.00 | 0 |
| 孙总 | 8.02 | 0.00 | 8.02 | 2.445496 | 0.000000 | 2.445496 | 11.00 | 3 |
| 黄先生 | 7.06 | 0.00 | 7.06 | 2.157709 | 0.000000 | 2.157709 | 20.00 | 0 |
| 王 | 6.51 | 0.00 | 6.51 | 1.995293 | 0.000000 | 1.995293 | 33.00 | 0 |
| 枫先生 | 6.33 | 0.00 | 6.33 | 1.941223 | 0.000000 | 1.941223 | 28.00 | 0 |
| 张无忌 | 5.98 | 0.00 | 5.98 | 1.836389 | 0.000000 | 1.836389 | 20.00 | 0 |
| 董贝 | 5.06 | 0.00 | 5.06 | 1.562468 | 0.000000 | 1.562468 | 12.00 | 1 |
| 彭先生 | 4.83 | 0.00 | 4.83 | 1.493333 | 0.000000 | 1.493333 | 32.00 | 0 |
| 孙先生 | 4.15 | 0.00 | 4.15 | 1.291974 | 0.000000 | 1.291974 | 55.00 | 0 |
| 李先生 | 3.80 | 0.00 | 3.80 | 1.186517 | 0.000000 | 1.186517 | 10.00 | 1 |
| 潘先生 | 3.38 | 0.00 | 3.38 | 1.062671 | 0.000000 | 1.062671 | 55.00 | 0 |
| 王先生 | 3.22 | 0.00 | 3.22 | 1.013333 | 0.000000 | 1.013333 | 41.00 | 0 |
| 袁 | 2.86 | 0.00 | 2.86 | 0.907769 | 0.000000 | 0.907769 | 4.00 | 1 |
| 陈先生 | 1.96 | 0.00 | 1.96 | 0.640000 | 0.000000 | 0.640000 | 48.00 | 0 |
| 公孙先生 | 0.94 | 0.00 | 0.94 | 0.333754 | 0.000000 | 0.333754 | 5.00 | 2 |
| 胡先生 | 0.00 | 0.00 | 0.00 | 0.054797 | 0.000000 | 0.054797 | 2.00 | 8 |
Total rows: 17
## 3) Intimacy
| assistant | member | intimacy | sessions | recharge_amount |
|---|---|---:|---:|---:|
| 小燕 | 葛先生 | 10.00 | 50 | 43000.00 |
| 七七 | 轩哥 | 10.00 | 41 | 23000.00 |
| 佳怡 | 罗先生 | 10.00 | 39 | 20000.00 |
| 璇子 | 轩哥 | 10.00 | 20 | 18000.00 |
| 阿清 | 张先生 | 10.00 | 18 | 0.00 |
| 小燕 | 小燕 | 10.00 | 17 | 0.00 |
| 璇子 | 江先生 | 10.00 | 14 | 6000.00 |
| 千千 | 张先生 | 10.00 | 12 | 0.00 |
| 婉婉 | 吴先生 | 10.00 | 10 | 0.00 |
| 千千 | 梅 | 10.00 | 10 | 3000.00 |
| 球球 | 罗先生 | 10.00 | 6 | 9000.00 |
| 周周 | 周周 | 9.93 | 16 | 7000.00 |
| 佳怡 | 陈先生 | 9.82 | 5 | 3000.00 |
| 涛涛 | 轩哥 | 9.70 | 8 | 5000.00 |
| 年糕 | 葛先生 | 9.62 | 8 | 0.00 |
| 涛涛 | 蔡总 | 9.57 | 11 | 25000.00 |
| 阿清 | 胡先生 | 9.48 | 5 | 3000.00 |
| 佳怡 | 陈腾鑫 | 9.38 | 7 | 4000.00 |
| 小柔 | 蔡总 | 9.03 | 8 | 33000.00 |
| 年糕 | 常总 | 8.47 | 5 | 0.00 |
| 小侯 | 张先生 | 8.21 | 15 | 0.00 |
| 阿清 | 葛先生 | 8.20 | 7 | 10000.00 |
| 佳怡 | 小熊 | 8.12 | 5 | 7000.00 |
| 周周 | 罗先生 | 8.07 | 4 | 6000.00 |
| 阿清 | 孙总 | 8.04 | 4 | 0.00 |
| 阿清 | 梅 | 7.96 | 4 | 3000.00 |
| 千千 | 周先生 | 7.87 | 12 | 1000.00 |
| 球球 | 周周 | 7.84 | 9 | 4000.00 |
| 球球 | 轩哥 | 7.75 | 5 | 0.00 |
| 小柔 | 轩哥 | 7.75 | 5 | 0.00 |
| 小侯 | 李先生 | 7.42 | 11 | 6000.00 |
| 小柔 | 明哥 | 7.36 | 6 | 3000.00 |
| 乔西 | 陈先生 | 7.34 | 1 | 3000.00 |
| 婉婉 | 明哥 | 7.29 | 4 | 3000.00 |
| 璇子 | 蔡总 | 7.25 | 8 | 25000.00 |
| 七七 | 蔡总 | 7.08 | 8 | 25000.00 |
| 七七 | 胡先生 | 7.00 | 2 | 3000.00 |
| 千千 | 孙总 | 6.97 | 3 | 0.00 |
| 佳怡 | 胡先生 | 6.89 | 1 | 3000.00 |
| 千千 | 小熊 | 6.87 | 4 | 3000.00 |
| 阿清 | 小燕 | 6.87 | 2 | 0.00 |
| 周周 | 常总 | 6.63 | 4 | 0.00 |
| 涛涛 | 小燕 | 6.44 | 2 | 0.00 |
| 阿清 | 轩哥 | 6.39 | 2 | 0.00 |
| 年糕 | 叶先生 | 6.39 | 1 | 3000.00 |
| 球球 | 张先生 | 6.28 | 5 | 0.00 |
| 周周 | 张先生 | 6.21 | 5 | 0.00 |
| 球球 | 小熊 | 5.97 | 3 | 4000.00 |
| 乔西 | 罗先生 | 5.97 | 1 | 3000.00 |
| 小侯 | 胡先生 | 5.96 | 2 | 3000.00 |
| 球球 | 胡先生 | 5.68 | 1 | 0.00 |
| 球球 | 孙总 | 5.63 | 2 | 0.00 |
| 璇子 | 孙总 | 5.55 | 2 | 0.00 |
| 千千 | 胡先生 | 5.30 | 2 | 0.00 |
| 婉婉 | 章先生 | 5.22 | 1 | 3000.00 |
| 婉婉 | 公孙先生 | 5.17 | 1 | 3000.00 |
| 菲菲 | 陈腾鑫 | 5.15 | 1 | 1000.00 |
| 千千 | 小燕 | 5.15 | 1 | 0.00 |
| 千千 | 公孙先生 | 5.14 | 1 | 0.00 |
| 阿清 | 清 | 5.11 | 6 | 3000.00 |
| 苏苏 | 蔡总 | 5.01 | 3 | 10000.00 |
| 周周 | 林先生 | 4.98 | 1 | 0.00 |
| 球球 | 江先生 | 4.84 | 1 | 0.00 |
| 七七 | 小燕 | 4.84 | 1 | 0.00 |
| 凤梨 | 葛先生 | 4.79 | 2 | 0.00 |
| 佳怡 | 轩哥 | 4.78 | 2 | 0.00 |
| 年糕 | 小燕 | 4.70 | 1 | 0.00 |
| 涛涛 | 罗先生 | 4.67 | 4 | 0.00 |
| 年糕 | 轩哥 | 4.62 | 2 | 0.00 |
| 婉婉 | 孙总 | 4.60 | 2 | 0.00 |
| 佳怡 | 周周 | 4.55 | 3 | 8000.00 |
| yy | 公孙先生 | 4.47 | 1 | 0.00 |
| 周周 | 林先生 | 4.36 | 1 | 1000.00 |
| 年糕 | 王 | 4.30 | 2 | 3000.00 |
| 七七 | 江先生 | 4.17 | 2 | 0.00 |
| 周周 | 轩哥 | 4.16 | 4 | 0.00 |
| 七七 | 孙总 | 4.14 | 1 | 0.00 |
| 年糕 | 李先生 | 4.08 | 1 | 0.00 |
| 涛涛 | 叶先生 | 4.02 | 1 | 0.00 |
| 婉婉 | 叶先生 | 4.02 | 1 | 0.00 |
| yy | 叶先生 | 4.01 | 1 | 0.00 |
| 凤梨 | 叶先生 | 4.01 | 1 | 0.00 |
| 小侯 | 葛先生 | 3.98 | 2 | 0.00 |
| 佳怡 | 林志铭 | 3.95 | 1 | 0.00 |
| 千千 | 黄先生 | 3.90 | 4 | 1000.00 |
| 婉婉 | 葛先生 | 3.89 | 2 | 0.00 |
| 苏苏 | 罗先生 | 3.86 | 3 | 3000.00 |
| 苏苏 | 黄先生 | 3.83 | 8 | 0.00 |
| 周周 | 小熊 | 3.81 | 2 | 0.00 |
| 涛涛 | 孙总 | 3.68 | 1 | 0.00 |
| 年糕 | 胡先生 | 3.67 | 1 | 1000.00 |
| 吱吱 | 李先生 | 3.67 | 1 | 0.00 |
| 周周 | 葛先生 | 3.66 | 1 | 0.00 |
| 婉婉 | 王 | 3.62 | 1 | 3000.00 |
| 婉婉 | 轩哥 | 3.56 | 1 | 0.00 |
| 千千 | 蔡总 | 3.56 | 1 | 0.00 |
| 吱吱 | 葛先生 | 3.50 | 1 | 0.00 |
| 阿清 | 陈腾鑫 | 3.47 | 3 | 1000.00 |
| 璇子 | 罗先生 | 3.43 | 3 | 5000.00 |
| 乔西 | 蔡总 | 3.35 | 1 | 13000.00 |
| yy | 张先生 | 3.34 | 1 | 0.00 |
| yy | 葛先生 | 3.28 | 1 | 0.00 |
| Amy | 轩哥 | 3.19 | 1 | 3000.00 |
| 乔西 | 葛先生 | 3.09 | 2 | 0.00 |
| 周周 | 江先生 | 3.07 | 1 | 0.00 |
| 年糕 | 范先生 | 2.98 | 1 | 1000.00 |
| yy | 林志铭 | 2.98 | 1 | 0.00 |
| 阿清 | 黄先生 | 2.95 | 3 | 0.00 |
| 年糕 | 罗超 | 2.93 | 1 | 0.00 |
| 年糕 | 艾宇民 | 2.92 | 1 | 0.00 |
| 七七 | 张先生 | 2.89 | 2 | 0.00 |
| 凤梨 | 林先生 | 2.88 | 1 | 0.00 |
| 七七 | 罗超 | 2.87 | 1 | 0.00 |
| 璇子 | 张先生 | 2.87 | 1 | 0.00 |
| 球球 | 常总 | 2.83 | 2 | 0.00 |
| 乔西 | 轩哥 | 2.77 | 2 | 0.00 |
| yy | 孙总 | 2.77 | 1 | 0.00 |
| 年糕 | 小熊 | 2.72 | 1 | 0.00 |
| 七七 | 葛先生 | 2.71 | 1 | 0.00 |
| 千千 | 李先生 | 2.62 | 1 | 0.00 |
| 七七 | 罗先生 | 2.62 | 1 | 5000.00 |
| 小琳 | 轩哥 | 2.52 | 1 | 0.00 |
| 年糕 | 胡总 | 2.48 | 2 | 1000.00 |
| 苏苏 | 柳先生 | 2.42 | 2 | 0.00 |
| 涛涛 | 葛先生 | 2.39 | 1 | 10000.00 |
| 小侯 | 轩哥 | 2.38 | 2 | 0.00 |
| 千千 | 葛先生 | 2.37 | 2 | 0.00 |
| 七七 | 林总 | 2.35 | 1 | 0.00 |
| 乔西 | 小熊 | 2.34 | 1 | 0.00 |
| 小琳 | 林总 | 2.26 | 1 | 0.00 |
| 璇子 | 周周 | 2.19 | 1 | 0.00 |
| 阿清 | 王先生 | 2.17 | 2 | 0.00 |
| 阿清 | 罗先生 | 2.15 | 1 | 0.00 |
| 瑶瑶 | 蔡总 | 2.12 | 1 | 10000.00 |
| 小柳 | 轩哥 | 2.12 | 1 | 0.00 |
| 小琳 | 陈腾鑫 | 2.11 | 1 | 0.00 |
| 千千 | 轩哥 | 2.00 | 1 | 0.00 |
| 年糕 | 罗先生 | 1.95 | 1 | 0.00 |
| 乔西 | 陈德韩 | 1.87 | 2 | 539.00 |
| 千千 | 陈先生 | 1.83 | 1 | 0.00 |
| 阿清 | 枫先生 | 1.79 | 1 | 0.00 |
| 千千 | 枫先生 | 1.79 | 1 | 0.00 |
| 乔西 | 张无忌 | 1.74 | 1 | 0.00 |
| 千千 | 范先生 | 1.71 | 1 | 0.00 |
| 周周 | T | 1.61 | 3 | 0.00 |
| 婉婉 | 江先生 | 1.61 | 1 | 3000.00 |
| 涛涛 | 胡总 | 1.60 | 1 | 1000.00 |
| 苏苏 | 周周 | 1.59 | 1 | 0.00 |
| 小侯 | 周先生 | 1.54 | 2 | 0.00 |
| 小侯 | 梅 | 1.54 | 1 | 0.00 |
| 苏苏 | 林先生 | 1.43 | 2 | 0.00 |
| 小侯 | 清 | 1.43 | 1 | 3000.00 |
| 千千 | 清 | 1.43 | 1 | 3000.00 |
| 小侯 | 彭先生 | 1.35 | 1 | 0.00 |
| 千千 | 林总 | 1.21 | 1 | 0.00 |
| 佳怡 | 彭先生 | 1.15 | 1 | 0.00 |
| 婉婉 | 周先生 | 1.13 | 1 | 0.00 |
| 苏苏 | 周先生 | 1.07 | 1 | 0.00 |
| 周周 | 昌哥 | 1.04 | 1 | 0.00 |
| 球球 | 蔡总 | 1.01 | 1 | 0.00 |
| 苏苏 | 张先生 | 1.00 | 2 | 0.00 |
| 苏苏 | 李先生 | 0.98 | 1 | 0.00 |
| 小敌 | 李先生 | 0.95 | 1 | 0.00 |
| 婉婉 | 刘哥 | 0.93 | 2 | 0.00 |
| 球球 | T | 0.87 | 2 | 0.00 |
| 布丁 | 张先生 | 0.85 | 1 | 0.00 |
| 周周 | 林总 | 0.85 | 1 | 0.00 |
| 嘉嘉 | 轩哥 | 0.82 | 1 | 0.00 |
| 小柔 | 葛先生 | 0.81 | 1 | 0.00 |
| 乔西 | 张先生 | 0.80 | 2 | 0.00 |
| 球球 | 候 | 0.76 | 2 | 0.00 |
| 小侯 | T | 0.73 | 2 | 0.00 |
| 嘉嘉 | 罗先生 | 0.73 | 1 | 0.00 |
| 小侯 | 黄先生 | 0.73 | 1 | 0.00 |
| 小敌 | 林先生 | 0.71 | 1 | 0.00 |
| 球球 | 葛先生 | 0.70 | 2 | 0.00 |
| 乔西 | T | 0.69 | 2 | 0.00 |
| 球球 | 老宋 | 0.66 | 1 | 0.00 |
| 乔西 | 林先生 | 0.60 | 1 | 0.00 |
| 佳怡 | T | 0.56 | 2 | 0.00 |
| 小怡 | 张先生 | 0.56 | 1 | 0.00 |
| 年糕 | 张先生 | 0.53 | 1 | 0.00 |
| 阿清 | 李先生 | 0.49 | 1 | 0.00 |
| 球球 | 黄先生 | 0.47 | 1 | 0.00 |
| 球球 | 林总 | 0.45 | 1 | 0.00 |
| 小敌 | 郑先生 | 0.41 | 2 | 0.00 |
| 小侯 | 艾宇民 | 0.41 | 1 | 0.00 |
| 婉婉 | 常总 | 0.41 | 1 | 0.00 |
| 小怡 | 周先生 | 0.40 | 1 | 0.00 |
| 千千 | 罗先生 | 0.39 | 1 | 0.00 |
| 球球 | 小燕 | 0.35 | 1 | 0.00 |
| 年糕 | 周先生 | 0.34 | 1 | 0.00 |
| 小燕 | 罗先生 | 0.32 | 1 | 0.00 |
| 小敌 | 刘哥 | 0.30 | 1 | 0.00 |
| 小柔 | 孟紫龙 | 0.27 | 1 | 0.00 |
| 阿清 | 候 | 0.25 | 1 | 0.00 |
| 乔西 | 候 | 0.22 | 1 | 0.00 |
| 小敌 | 张先生 | 0.19 | 1 | 0.00 |
| 千千 | T | 0.19 | 1 | 0.00 |
| 苏苏 | 葛先生 | 0.11 | 1 | 0.00 |
| 小侯 | 候 | 0.10 | 1 | 0.00 |
| 苏苏 | T | 0.09 | 1 | 0.00 |
| 小侯 | 陈腾鑫 | 0.06 | 1 | 0.00 |
| 涛涛 | 候 | 0.04 | 1 | 0.00 |
| 阿清 | 常总 | 0.03 | 1 | 0.00 |
| 苏苏 | 候 | 0.03 | 1 | 0.00 |
| 球球 | 李先生 | 0.01 | 1 | 0.00 |
| 周周 | 明哥 | 0.00 | 1 | 0.00 |
| 梦梦 | 葛先生 | 0.00 | 1 | 0.00 |
| 七七 | 林先生 | 0.00 | 1 | 0.00 |
| 璇子 | 林先生 | 0.00 | 1 | 0.00 |
| 婉婉 | 候 | 0.00 | 1 | 0.00 |
| 小柔 | T | 0.00 | 1 | 0.00 |
| 年糕 | 潘先生 | 0.00 | 1 | 0.00 |
| 涛涛 | 张先生 | 0.00 | 1 | 0.00 |
| Amy | 明哥 | 0.00 | 1 | 0.00 |
| 年糕 | 明哥 | 0.00 | 1 | 0.00 |
Total rows: 217

View File

@@ -0,0 +1,297 @@
# 亲密指数计算说明(代码翻译版)
## 1. 目的
本文档不是“业务口头定义”,而是**按当前代码真实实现**翻译出来的计算逻辑,便于你做以下事情:
- 跟业务同学对齐“现在系统到底怎么算的”
- 排查为什么某个客户-助教分数高/低
- 做参数调优前的影响评估
---
## 2. 代码入口与依赖
- 任务主类:`etl_billiards/tasks/dws/index/intimacy_index_task.py`
- 指数基类(衰减、分位、映射、平滑):`etl_billiards/tasks/dws/index/base_index_task.py`
- 课型映射BASE/BONUS`etl_billiards/tasks/dws/base_dws_task.py`
- 参数表:`billiards_dws.cfg_index_parameters`
- 结果表:`billiards_dws.dws_member_assistant_intimacy`
- 分位历史表:`billiards_dws.dws_index_percentile_history`
执行主流程函数:`IntimacyIndexTask.execute()`
---
## 3. 总流程(按代码执行顺序)
1. 读取门店、租户、参数
2. 抽取助教服务记录(近 `lookback_days`
3.`(member_id, assistant_id)` 分组并做“会话合并”
4. 做充值归因(服务结束后 `recharge_attribute_hours` 内充值)
5. 计算分项分数 `F/R/M/D` 和激增放大 `mult`
6. 合成 `raw_score`
7.`raw_score` 映射到 `display_score`0-10
8. 保存分位历史(支持 EWMA 平滑)
9. 删除旧记录并写入新记录
---
## 4. 数据抽取口径
### 4.1 服务记录(`_extract_service_records`
来源表:`billiards_dwd.dwd_assistant_service_log`,并 `JOIN billiards_dwd.dim_assistant` 获取 `assistant_id`
过滤条件:
- `site_id = 当前门店`
- `tenant_member_id > 0`(排除散客)
- `is_delete = 0`
- `user_id > 0`
- `last_use_time``[now - lookback_days, now)`
- `dim_assistant.scd2_is_current = 1`
输出核心字段:
- `member_id`
- `assistant_id`
- `assistant_user_id`
- `start_time`
- `end_time`(对应 `last_use_time`
- `duration_minutes``income_seconds / 60`
- `skill_id`
---
## 5. 会话合并逻辑(`_group_and_merge_sessions`
先按 `(member_id, assistant_id)` 分组,再对每组按 `start_time` 排序后做合并。
### 5.1 合并规则
- 相邻两条服务若满足:`next.start_time - current.session_end <= session_merge_hours`(默认 4 小时)
- 则视为同一次会话,执行:
- `session_end = max(end_time)`
- `total_duration_minutes += 当前时长`
- `course_weight = max(历史权重, 当前权重)`
- `is_incentive = 历史 or 当前`
### 5.2 课型与权重
通过 `get_course_type(skill_id)` 决定课型:
- `BONUS`:权重 `incentive_weight`(默认 1.5
- 其他:权重 1.0
`get_course_type` 依赖 `cfg_skill_type`。若未命中映射,默认 `BASE`(权重 1.0)。
### 5.3 会话级统计
每个客户-助教对会得到:
- `session_count`
- `total_duration_minutes`
- `basic_session_count`
- `incentive_session_count`
- `days_since_last_session`
---
## 6. 充值归因逻辑(`_extract_attributed_recharges`
来源表:`billiards_dwd.dwd_recharge_order`
查询条件:
- `site_id = 当前门店`
- `member_id IN 本轮出现的会员`
- `settle_type = 5`(充值订单)
- `pay_time >= now - lookback_days`
归因条件(对每笔充值):
- 找到该会员对应的会话
-`session_end <= pay_time``pay_time - session_end <= recharge_attribute_hours`(默认 1 小时)
- 则记为该助教贡献:
- `attributed_recharge_count += 1`
- `attributed_recharge_amount += pay_amount`
- 记录一条 `AttributedRecharge`
---
## 7. 分数计算(`_calculate_component_scores`
## 7.1 时间衰减函数
来自 `BaseIndexTask.decay(days, halflife)`
`decay(d, h) = exp(-ln(2) * d / h)`
含义:`d = h` 时权重衰减到 0.5。
### 7.2 分项定义
设:
- `w_i` = 会话权重1.0 或 1.5
- `d_i` = 会话距今天数(按 `session_end`
- `A0` = `amount_base`(默认 500
#### F频次强度
`F = sum( w_i * decay(d_i, halflife_session) )`
#### R最近温度
`R = decay(days_since_last_session, halflife_last)`,无最近会话则 0
#### M归因充值强度
对每笔归因充值 `r`
`M += ln(1 + pay_amount_r / A0) * decay(days_ago_r, halflife_recharge)`
#### D时长贡献
`D = sum( sqrt(duration_hours_i) * w_i * decay(d_i, halflife_session) )`
其中 `duration_hours_i = total_duration_minutes_i / 60`
#### burst 与 mult激增放大
先算:
- `F_short = sum( w_i * decay(d_i, halflife_short) )`
- `F_long = sum( w_i * decay(d_i, halflife_long) )`
再算:
- `ratio = F_short / (F_long + 1e-6)`
- `burst = ln(1 + (ratio - 1))``ratio > 1`,否则 `0`
- `mult = 1 + burst_gamma * burst`
---
## 8. Raw Score 合成
`raw_score = (weight_frequency * F + weight_recency * R + weight_recharge * M + weight_duration * D) * mult`
默认权重(代码默认值):
- `weight_frequency = 2.0`
- `weight_recency = 1.5`
- `weight_recharge = 2.0`
- `weight_duration = 0.5`
- `burst_gamma = 0.6`
---
## 9. Display Score0-10映射
`BaseIndexTask.batch_normalize_to_display` 完成。
1. 收集全体 `raw_score`
2. 计算分位点 `q_l/q_u`(默认 P5/P95
3. 可选 EWMA 平滑分位点(`use_smoothing=1` 时)
4. Winsorize`clipped = min(max(raw, q_l), q_u)`
5. 可选压缩(`compression_mode`
- `0 -> none`
- `1 -> log1p`
- `2 -> asinh`
6. MinMax 映射到 `[0,10]`
7. 四舍五入到 2 位小数
特殊情况:
-`max_val - min_val < 1e-6`,直接返回 5.0(避免分母接近 0
EWMA 公式:
`Q_t = (1 - alpha) * Q_{t-1} + alpha * Q_now`,默认 `alpha=0.2`
---
## 10. 参数加载优先级
函数:`_load_params()`
- 先用代码默认参数(`DEFAULT_PARAMS`
- 再用数据库参数覆盖(`cfg_index_parameters`
数据库参数加载规则(`load_index_parameters`
- 只取 `effective_from <= CURRENT_DATE``effective_to` 未过期
-`effective_from DESC` 排序
- 同名参数取第一条
即:**DB > 代码默认值**。
---
## 11. 持久化逻辑
函数:`_save_intimacy_data`
1. 先删除当前门店下本轮 `(member_id, assistant_id)` 对应旧记录
2. 再逐条插入新结果
3. 插入字段包含:
- 输入特征(会话数、时长、归因充值等)
- 分项得分F/R/M/D、burst
- `raw_score/display_score`
- 时间戳(`calc_time/created_at/updated_at`
唯一键:`(site_id, member_id, assistant_id)`
---
## 12. 默认参数清单(代码 + 种子一致)
| 参数 | 默认值 | 含义 |
|---|---:|---|
| `lookback_days` | 60 | 回看窗口(天) |
| `session_merge_hours` | 4 | 会话合并间隔(小时) |
| `recharge_attribute_hours` | 1 | 充值归因窗口(小时) |
| `amount_base` | 500 | 充值强度压缩基数 |
| `incentive_weight` | 1.5 | 附加课权重 |
| `halflife_session` | 14 | 会话衰减半衰期 |
| `halflife_last` | 10 | 最近服务衰减半衰期 |
| `halflife_recharge` | 21 | 充值衰减半衰期 |
| `halflife_short` | 7 | 短期频次半衰期 |
| `halflife_long` | 30 | 长期频次半衰期 |
| `weight_frequency` | 2.0 | F 权重 |
| `weight_recency` | 1.5 | R 权重 |
| `weight_recharge` | 2.0 | M 权重 |
| `weight_duration` | 0.5 | D 权重 |
| `burst_gamma` | 0.6 | 激增放大系数 |
| `percentile_lower` | 5 | 下分位P5 |
| `percentile_upper` | 95 | 上分位P95 |
| `ewma_alpha` | 0.2 | 分位平滑系数 |
| `compression_mode` | 1 | 压缩方式1=log1p |
| `use_smoothing` | 1 | 是否启用 EWMA |
---
## 13. 代码语义下的关键注意点(非常重要)
以下不是业务理想设计,而是“按当前实现”的真实行为:
1. 课型映射依赖 `cfg_skill_type`
-`skill_id` 未映射,默认按 `BASE` 处理(不会给 1.5 权重)。
2. 会话合并后权重取 `max`
- 同一合并会话里如果出现过 `BONUS`,整个会话的 `course_weight` 可能被抬到 1.5。
3. 充值归因“注释意图”与“实际循环”可能有偏差
- 代码注释写“1 笔充值只归因 1 个助教”,
-`break` 只跳出“会话循环”不会跳出“pair 循环”,在特定时序下同一笔充值可能落到多个助教对上。
4. Display Score 是相对分
- 同一人不同批次跑数,若整体分布变化,即使 raw 接近display 也可能变化(因分位映射)。
---
## 14. 一句话总结
当前亲密指数本质上是:**“近期加权服务频次 + 最近接触 + 归因充值 + 服务时长”** 的加权和,再乘上**短期活跃激增放大因子**,最后经分位截断与归一化映射到 0-10。