《模型不玄学》第11章 校验与物化:分群对不对、怎么变成名单

发布时间:2026/9/5 1:45:16
《模型不玄学》第11章 校验与物化:分群对不对、怎么变成名单 小白一句话聚类跑完、名字起完还不能直接交差。得先回答两个问题——这群分得到底稳不稳、清不清晰以及怎么把它变成一份每个用户属于哪类的名单让人和下游都能用。前面两章讲了怎么分堆和怎么起名。这一章把结果落到地上先校验分群质量再把分群物化成分群名单。全程仍用示例数据评分日 2026-07-2357 个有充分历史用户 1 个冷启动。第一步把分群物化成名单聚类结束每个用户在算法眼里只是一个 0~4 的簇编号。要交给运营或下游模型得变成一张人能直接用的表附件/04_行为聚类篇/behavior_cluster_validate.py把每个用户和它的人话分群名对应起来导出成附件/04_行为聚类篇/behavior_cluster_membership.csvuidcluster_idcluster_nameis_cold_startU00362stable_multi_task0U00091declining_high_freq0U0040空cold_start1U0040 走冷启动路由第10章讲过不占任何行为分群只标cold_start。57 个有历史用户的分群人数和第10章的行为指纹表完全一致分群人数stable_multi_task稳定高频多任务12rising_multi_task中高频、在涨10declining_high_freq中高频、在掉15low_intensity_few_tasks低频少任务15near_cold_start_single极稀疏、临冷启动5这张名单至少有一条现成的出路第3章说过双模型共用一份特征底座行为分群既能直接当运营人群包对在掉那批多提醒一次也能编码成特征喂给下一章的活跃度模型——让它除了看活跃天数还知道这人是哪种风格。物化这步就是把机器心里的分堆变成能拿出去用的东西。第二步校验分群清不清晰分群不能只看数学指标漂亮得确认每堆内部确实像、堆间确实分得开。一个常用判据是轮廓系数它看每个样本离自己堆近不近、离隔壁堆远不远越接近 1 越清爽出现负数说明有样本其实站错了堆。脚本算出的结果是分群人均轮廓最差样本轮廓人数near_cold_start_single0.8370.8155low_intensity_few_tasks0.4490.10315stable_multi_task0.4400.18612declining_high_freq0.3740.08415rising_multi_task0.3570.11610整体0.445—57整体 0.445和选 k 时 k5 的轮廓系数吻合第10章那个 0.445 就是它。所有分群人均轮廓都为正最差样本的轮廓也都大于 0说明没有哪个用户明显被分错了堆——这关过了。但也能看出rising在涨和declining在掉两堆的人均轮廓偏低0.36 左右。这合乎常理两堆的活跃天数接近一个 12 天、一个 10.5 天只是趋势方向相反行为本来就近分堆边界自然没那么利落。校验的作用正在于此——它告诉你哪几堆分得干脆、哪几堆边界模糊模糊的那几堆下游用的时候就要更谨慎别把在涨和在掉当成泾渭分明的两类去硬区分。第三步校验分群稳不稳K-Means 起步时随机撒中心换一次随机种子可能得到不同的分法。真实项目里数据没这么干净分群可能随初始化飘。所以上线前要看一眼换几个种子分出来的是不是同一批堆。附件/04_行为聚类篇/behavior_cluster_validate.py用另外三个种子12345、999、7各跑一遍 k5和主模型种子 20260827比一致性量法是调整兰德指数 ARI1 表示完全一样对照ARI结论seed 12345 vs 202608271.000高度一致seed 999 vs 202608271.000高度一致seed 7 vs 202608271.000高度一致这份示例数据上三个种子分出来的堆一模一样说明分群很稳可信赖。但这是小样本、行为差异明显带来的好运——真实数据里分群常常没这么稳。所以两件事要养成习惯一是固定随机种子本项目用 20260827可复现二是分群带版本号第10章讲的cluster_semantic_version重训后重新核对行为指纹、重新对齐名字不能假设簇 3 永远是某一堆。稳定性校验就是给要不要带版本号、要不要重新对齐提供证据。第四步分群有没有信息量旁证不是目标聚类本身没用过任何标签。但分完之后可以回头看一眼各分群在未来 7 天是否再来active_7d的比例是不是有差别——这只是事后印证分群有没有抓住有用结构绝不是聚类要去拟合的目标。分群active_7d 比例stable_multi_task1.00rising_multi_task0.90declining_high_freq0.73low_intensity_few_tasks0.53near_cold_start_single0.20从稳定高频到极稀疏比例从 1.00 一路滑到 0.20梯度很清楚。这说明行为像的人活跃倾向也相近——分群确实抓到了信号不是随机抱团。但话要反过来说这是分完之后才看出来的聚类算法全程没碰 active_7d。如果反过来拿 active_7d 去指导聚类那就越界成第2章讲的用标签去定义聚类分群就不再是纯粹的行为结构了。动手自己跑一遍校验与物化打开附件/04_行为聚类篇/behavior_cluster_validate.py依赖第4章的 numpy scikit-learn跑一遍python 附件/04_行为聚类篇/behavior_cluster_validate.py你会看到和上面一致的四块输出并生成附件/04_行为聚类篇/behavior_cluster_membership.csv。然后做三件事打开名单对表。用表格软件打开导出的 CSV数数五个分群的人数和第10章行为指纹表对一下应该是同一批划分。找模糊堆。看轮廓系数那张表找出人均轮廓最低的两堆rising / declining想一下为什么它们边界没那么利落。算一个旁证比例。随便挑一个分群比如 low_intensity_few_tasks 的 15 个人按第6章 active_7d 的定义手算一下这 15 人未来 7 天再来几个看看是不是接近脚本打出的 0.53。把分群要物化成名单、质量看轮廓、稳不稳看换种子的一致性、信息量只当旁证这几件事记牢行为分类这一块就真正闭合了。下一章进入活跃度预测——项目的主菜那个模型才真正用上标签。本章配套脚本附件/04_行为聚类篇/behavior_cluster_validate.py物化名单 轮廓质量 换种子 ARI 稳定性 分群 vs active_7d 旁证与第9、10章脚本都用 scikit-learn所需的 numpy、scikit-learn 已在第4章附件/00_公共/requirements.txt中列出环境搭建见第4章。