"""生成演示数据:跑两个场景扫描,落库若干线索,供前端看板演示。 用法: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()