119 lines
5.6 KiB
SQL
119 lines
5.6 KiB
SQL
-- =============================================================================
|
||
-- 指数算法参数初始化脚本
|
||
-- 版本: v1.0
|
||
-- 创建日期: 2026-02-03
|
||
-- 描述: 为客户召回指数和客户-助教亲密指数插入默认参数
|
||
-- =============================================================================
|
||
|
||
-- 清空旧数据(如果需要重新初始化)
|
||
-- DELETE FROM billiards_dws.cfg_index_parameters WHERE index_type IN ('RECALL', 'INTIMACY');
|
||
|
||
-- =============================================================================
|
||
-- 客户召回指数(RECALL)参数
|
||
-- =============================================================================
|
||
|
||
INSERT INTO billiards_dws.cfg_index_parameters
|
||
(index_type, param_name, param_value, description, effective_from)
|
||
VALUES
|
||
-- 基础参数
|
||
('RECALL', 'lookback_days', 60, '回溯窗口(天):分析近60天的数据', CURRENT_DATE),
|
||
('RECALL', 'sigma_min', 2.0, '波动下限(天):避免σ过小导致超期过敏', CURRENT_DATE),
|
||
|
||
-- 半衰期参数
|
||
('RECALL', 'halflife_new', 7, '新客户半衰期(天):7天后新客户加分衰减到一半', CURRENT_DATE),
|
||
('RECALL', 'halflife_recharge', 10, '刚充值半衰期(天):10天后充值加分衰减到一半', CURRENT_DATE),
|
||
|
||
-- 权重参数
|
||
('RECALL', 'weight_overdue', 3.0, '超期紧急性权重:主导因子,建议3.0', CURRENT_DATE),
|
||
('RECALL', 'weight_new', 1.0, '新客户权重:建议1.0', CURRENT_DATE),
|
||
('RECALL', 'weight_recharge', 1.0, '刚充值权重:建议1.0', CURRENT_DATE),
|
||
('RECALL', 'weight_hot', 1.0, '热度断档权重:建议1.0', CURRENT_DATE),
|
||
|
||
-- 映射参数
|
||
('RECALL', 'percentile_lower', 5, '下锚分位数:5分位', CURRENT_DATE),
|
||
('RECALL', 'percentile_upper', 95, '上锚分位数:95分位', CURRENT_DATE),
|
||
('RECALL', 'ewma_alpha', 0.2, 'EWMA平滑系数:越小越平滑,建议0.2', CURRENT_DATE)
|
||
ON CONFLICT (index_type, param_name, effective_from) DO UPDATE SET
|
||
param_value = EXCLUDED.param_value,
|
||
description = EXCLUDED.description,
|
||
updated_at = NOW();
|
||
|
||
|
||
-- =============================================================================
|
||
-- 客户-助教亲密指数(INTIMACY)参数
|
||
-- =============================================================================
|
||
|
||
INSERT INTO billiards_dws.cfg_index_parameters
|
||
(index_type, param_name, param_value, description, effective_from)
|
||
VALUES
|
||
-- 基础参数
|
||
('INTIMACY', 'lookback_days', 60, '回溯窗口(天):分析近60天的数据', CURRENT_DATE),
|
||
('INTIMACY', 'session_merge_hours', 4, '会话合并间隔(小时):4小时内的服务算同次', CURRENT_DATE),
|
||
('INTIMACY', 'recharge_attribute_hours', 1, '充值归因窗口(小时):服务结束后1小时内', CURRENT_DATE),
|
||
('INTIMACY', 'amount_base', 500, '金额压缩基准(元):选门店常见充值档位', CURRENT_DATE),
|
||
('INTIMACY', 'incentive_weight', 1.5, '附加课权重倍数:附加课=基础课的1.5倍', CURRENT_DATE),
|
||
|
||
-- 半衰期参数
|
||
('INTIMACY', 'halflife_session', 14, '会话衰减半衰期(天):14天后权重衰减到一半', CURRENT_DATE),
|
||
('INTIMACY', 'halflife_last', 10, '最近一次半衰期(天):10天后温度衰减到一半', CURRENT_DATE),
|
||
('INTIMACY', 'halflife_recharge', 21, '充值衰减半衰期(天):21天后充值贡献衰减到一半', CURRENT_DATE),
|
||
('INTIMACY', 'halflife_short', 7, '短期激增检测半衰期(天):用于Burst检测', CURRENT_DATE),
|
||
('INTIMACY', 'halflife_long', 30, '长期激增检测半衰期(天):用于Burst检测', CURRENT_DATE),
|
||
|
||
-- 权重参数
|
||
('INTIMACY', 'weight_frequency', 2.0, '频次权重:建议2.0', CURRENT_DATE),
|
||
('INTIMACY', 'weight_recency', 1.5, '最近一次权重:建议1.5', CURRENT_DATE),
|
||
('INTIMACY', 'weight_recharge', 2.0, '归因充值权重:建议2.0', CURRENT_DATE),
|
||
('INTIMACY', 'weight_duration', 0.5, '时长权重:次要因素,建议0.5', CURRENT_DATE),
|
||
('INTIMACY', 'burst_gamma', 0.6, '激增放大系数γ:建议0.6', CURRENT_DATE),
|
||
|
||
-- 映射参数
|
||
('INTIMACY', 'percentile_lower', 5, '下锚分位数:5分位', CURRENT_DATE),
|
||
('INTIMACY', 'percentile_upper', 95, '上锚分位数:95分位', CURRENT_DATE),
|
||
('INTIMACY', 'ewma_alpha', 0.2, 'EWMA平滑系数:越小越平滑,建议0.2', CURRENT_DATE)
|
||
ON CONFLICT (index_type, param_name, effective_from) DO UPDATE SET
|
||
param_value = EXCLUDED.param_value,
|
||
description = EXCLUDED.description,
|
||
updated_at = NOW();
|
||
|
||
|
||
-- =============================================================================
|
||
-- 验证
|
||
-- =============================================================================
|
||
|
||
-- 检查参数数量
|
||
DO $$
|
||
DECLARE
|
||
recall_count INTEGER;
|
||
intimacy_count INTEGER;
|
||
BEGIN
|
||
SELECT COUNT(*) INTO recall_count
|
||
FROM billiards_dws.cfg_index_parameters
|
||
WHERE index_type = 'RECALL';
|
||
|
||
SELECT COUNT(*) INTO intimacy_count
|
||
FROM billiards_dws.cfg_index_parameters
|
||
WHERE index_type = 'INTIMACY';
|
||
|
||
RAISE NOTICE '召回指数参数数量: %', recall_count;
|
||
RAISE NOTICE '亲密指数参数数量: %', intimacy_count;
|
||
|
||
IF recall_count < 10 THEN
|
||
RAISE WARNING '召回指数参数不完整,期望至少10个';
|
||
END IF;
|
||
|
||
IF intimacy_count < 15 THEN
|
||
RAISE WARNING '亲密指数参数不完整,期望至少15个';
|
||
END IF;
|
||
END $$;
|
||
|
||
-- 显示所有参数
|
||
SELECT
|
||
index_type,
|
||
param_name,
|
||
param_value,
|
||
description,
|
||
effective_from
|
||
FROM billiards_dws.cfg_index_parameters
|
||
ORDER BY index_type, param_name;
|