54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
"""生成演示数据:跑两个场景扫描,落库若干线索,供前端看板演示。
|
|
|
|
用法:python -m scripts.seed_demo
|
|
仅用于本地演示,使用脱敏/虚构数据,不涉及真实业务数据。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from app.db import get_sessionmaker
|
|
from app.engines import scan
|
|
from app.scenarios.churn_fraud import CohortPoint
|
|
from app.scenarios.split_contract import ContractRecord
|
|
|
|
|
|
def main() -> None:
|
|
sm = get_sessionmaker()
|
|
with sm() as session:
|
|
# 场景一:8 个客户拆单 + 同一实控人
|
|
contracts = [
|
|
ContractRecord(f"HT-{i}", f"政企客户{i}", 790000 + i * 25000) for i in range(8)
|
|
]
|
|
r1 = scan.run_split_contract_scan(
|
|
session, contracts, approval_threshold=1_000_000, shared_controller=True
|
|
)
|
|
|
|
# 场景二:养卡骗补,第 3 月断崖退订
|
|
curve = [
|
|
CohortPoint(0, 1.0), CohortPoint(1, 0.96),
|
|
CohortPoint(2, 0.92), CohortPoint(3, 0.08),
|
|
]
|
|
r2 = scan.run_churn_scan(
|
|
session, retention_curve=curve, commission_paid=360000,
|
|
active_ratio=0.04, zero_usage_ratio=0.93, channel_key="渠道-华南-001",
|
|
)
|
|
|
|
# 再来一条中置信
|
|
curve2 = [CohortPoint(0, 1.0), CohortPoint(1, 0.7), CohortPoint(2, 0.55)]
|
|
r3 = scan.run_churn_scan(
|
|
session, retention_curve=curve2, commission_paid=80000,
|
|
active_ratio=0.4, zero_usage_ratio=0.5, channel_key="渠道-西南-007",
|
|
)
|
|
|
|
session.commit()
|
|
for r in (r1, r2, r3):
|
|
if r.clue:
|
|
print(f"已生成线索 [{r.scenario_code}] {r.clue.title} "
|
|
f"置信={r.clue.confidence.value} 评分={r.clue.score}")
|
|
else:
|
|
print(f"[{r.scenario_code}] 未命中阈值,无线索")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|