AI 数据分析 7 月月度总结10 个最值得复盘的技术决策朱大喜的 7 月复盘笔记不吹不黑只讲真踩过的坑和真管用的招。一、当 AI 不再是魔法棒而是搭档7 月过去了一半的项目在跑 AI 数据一半在做纯工程优化。回头看这个月最大的认知变化是别再指望 AI 替你想明白它更适合当你的加速器。7 月初我接了一个零售行业的用户分群项目。甲方扔过来一句需求帮我们把用户分个类最好能自动给标签。听起来就是聚类 LLM 打标签的事对吧但实际跑下来技术决策链比想象中长得多。下面我把这个月里最值得复盘的 10 个决策点捋一捋。二、10 个决策复盘按重要性排序决策 1聚类算法别闭眼选 KMeans7 月这个项目里用户行为数据是高维稀疏的200 特征大量 0 值。一开始用了 KMeansk6结果出来四个簇挤在一起两个簇几乎没样本。换成HDBSCAN之后自动识别出 5 个有意义的分群 一个噪声簇轮廓系数从 0.31 提升到 0.52。import hdbscan from sklearn.preprocessing import StandardScaler import pandas as pd # 加载用户行为特征矩阵7月零售项目真实数据脱敏后 df pd.read_parquet(user_features_202607.parquet) # 标准化HDBSCAN 对尺度敏感但不像 KMeans 那样依赖球状假设 scaler StandardScaler() X_scaled scaler.fit_transform(df.select_dtypes(include[float64, int64])) # HDBSCAN 核心参数解析 # min_cluster_size: 最小簇大小设太小会产生大量碎片簇 # min_samples: 核心点的邻域样本数越大越保守更多点被标为噪声 clusterer hdbscan.HDBSCAN( min_cluster_size50, # 每个分群至少 50 人 min_samples10, # 核心点判定阈值 metriceuclidean, # 距离度量 cluster_selection_epsilon0.5 # 允许一定程度的簇合并 ) df[cluster] clusterer.fit_predict(X_scaled) # 查看分群分布 print(df[cluster].value_counts().sort_index()) # 输出示例-1(噪声):320, 0:2100, 1:1800, 2:950, 3:670, 4:430决策 2LLM 生成标签的幻觉税必须交直接用 GPT-4o 给聚类结果打标签测试了 200 条样本正确率大约 85%。但这 15% 的幻觉在生产环境里会直接导致运营给用户发错优惠券。最终方案是先用统计规则生成标签候选如高客单 低频 沉睡高价值再用 LLM 做语义润色和冲突消解。决策 3标签质量需要双重校验引入两个质检层人工抽检层每批次随机抽 50 条通过率需 ≥ 90%语义相似度层用sentence-transformers计算标签描述与用户实际行为的 embedding 余弦相似度低于 0.7 的打回重标from sentence_transformers import SentenceTransformer, util model SentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2) def check_label_quality(user_behavior_text: str, generated_label: str, threshold: float 0.7) - bool: 校验标签是否与用户行为描述匹配 emb1 model.encode(user_behavior_text, convert_to_tensorTrue) emb2 model.encode(generated_label, convert_to_tensorTrue) similarity util.cos_sim(emb1, emb2).item() return similarity threshold # 示例用户行为描述 vs 自动标签 result check_label_quality( 近30天购买5次客单价800偏好母婴品类, 高频高消费母婴用户 ) print(f标签质量合格: {result}) # 预期输出: True决策 4向量化之前先降维不是所有场景都需要7 月一个文本分类项目里我犯了经典错误2000 维的 TF-IDF 直接塞进模型训练慢得想砸电脑。后来用TruncatedSVD降到 200 维分类精度几乎没掉F1 从 0.89 降到 0.87推理速度却快了 8 倍。降维的代价有时比你想象的少得多。决策 5Prompts 别写死用模板 变量动态组装另一个教训来自 Prompt 管理。一开始我把所有 Prompt 硬编码在 Python 字符串里项目推进到第三周时已经出现了 6 个不同版本的 Prompt 散落在四个文件里。后来统一迁移到 YAML 模板 jinja2渲染可维护性直接拉满。决策 6不要所有数据都喂给 LLM — 做特征摘要这个月我验证了一个朴素的道理LLM 不需要原始数据它需要结构化的事实陈述。像用户 A 近 30 天 GMV 增长 35%主购品类从食品转向美妆这种摘要比这是用户 A 的 500 行订单明细有效得多。我在 pipeline 里加了一层Summarizer本质是对原始数据做 describe 异常检测生成一段不超过 200 字的用户画像摘要。决策 7模型选择上7B 模型在某些场景不输 70B具体地在标签润色这个任务上我对比了 Llama-3-8B、Qwen2-7B 和 GPT-4oQwen2-7B本地部署标签润色质量 89 分单条耗时 0.3s成本 ≈ 0GPT-4oAPI标签润色质量 92 分单条耗时 1.2s成本 $0.002/条处理 10 万用户时差距是 0 vs $200。果断选了 Qwen2-7B 本地部署。决策 8ETL 和 AI 不要耦合在同一个 pipeline7 月中旬有一次故障LLM API 挂了 20 分钟导致整个数据 pipeline 卡住。教训惨痛——数据清洗和 AI 推理必须解耦。现在我的架构是ETL → 落盘 → AI 推理异步消费中间用 Kafka 做缓冲。决策 9A/B 测试不是可选项是 AI 功能的上市许可证一个新上线的AI 自动推荐模块上线前我只做了离线评估Recall10 0.76没跑 A/B。结果上线首周 CTR 反而降了 2%。补跑 A/B 后发现AI 推荐偏向长尾商品但用户更倾向于点击热门款。离线指标和线上效果之间的 gap必须用 A/B 来填。决策 10文档和决策记录是这个月最值的投入这个月我强制自己每做一个技术决策都写一个 ADRArchitecture Decision Record。到月底一数16 个 ADR。回头看那些看似浪费时间的文档在跟同事对齐和后续迭代中帮了大忙。三、7 月踩的最深的三个坑坑 1特征穿越Data Leakage在 AI 场景下更难发现在一个预测模型里我用了用户是否点击过推荐卡片作为特征来预测用户是否会购买。这在传统 ML 里是标准的穿越问题但在 AI 场景下LLM 生成的标签里也隐含了未来信息——因为 LLM 的训练数据截止日期可能包含了你还没看到的数据。解决所有 LLM 生成的衍生特征必须在时间窗口上严格跟训练集对齐。坑 2Prompt 注入比你想象的容易用户昵称里包含请忽略前述指令这种字段虽然不是恶意攻击但当这段文本进入 LLM 的上下文时确实影响了输出质量。解决对用户输入统一做 sanitize移除控制性短语。坑 3AI 生成的置信度不可信LLM 说自己90% 确定≠ 真实准确率 90%。这个月统计下来当 GPT-4o 声称 high confidence 时实际准确率约 82%。解决永远用自己的校验 pipeline别信 LLM 的自评。四、8 月要做的事本地部署 Qwen2-7B 的标签服务做成标准化的微服务把 ADR 模板推广到整个数据团队建立 AI 功能的标准化 A/B 测试框架补上 prompt 版本管理的 CI/CD五、总结7 月让我真正理解了一句话AI 数据分析的难点不在 AI 本身而在你怎么把 AI 嵌入到一个可靠的数据 pipeline 里。这个月最大的进步不是学会了什么新模型或新框架而是建立起了一套用工程思维管 AI的方法论解耦、校验、A/B 测试、文档记录。这些看起来不那么AI的工程实践才是让 AI 从 demo 走向生产的关键。8 月继续加油保持复盘的习惯。