【免费下载链接】engagement-predictor
engagement-predictor是一个基于 scikit-learnRidge回归的互动率预测模型,用于预测品牌-达人营销内容的engagement_score。它的完整特征 schema 由 config.json 中的feature_columns精确定义——59 个输入特征,分属品牌、投放 brief、内容执行三个层级。本文带你逐组拆解:这 59 个特征分别是什么、为什么这样设计、以及它们如何最终汇入一个回归方程。
一、项目速览:模型要预测什么
- 预测目标:
engagement_score = (likes + comments + shares) / views,即互动率 - 模型形态:
Pipeline(OneHotEncoder+StandardScaler+Ridge),alpha 经GroupKFold(按brief_id分组)网格搜索选出,最终为10.0 - 模型文件:engagement_ridge.skops(使用
skops.io.dump序列化,比裸 pickle 更安全) - 训练数据:30 个品牌、300 条 brief、2000 条内容行的合成数据集,分别存放在 dataset/brands.csv、dataset/briefs.csv、dataset/contents.csv
⚠️ 注意:训练数据为合成 POC 数据(详见 README.md),指标刻画的是模型对编码关系的还原能力,不代表真实投放效果。
二、59 个特征全景:3 个层级速览
按特征名前缀,59 列可划分为三大块:
| 层级 | 特征数量 | 回答的问题 |
|---|---|---|
brand_*品牌级 | 3 | 这个品牌的"底子"如何? |
brief_*投放级 | 42 | brief 对内容施加了哪些要求? |
content_*内容级 | 14 | 这条内容实际执行成了什么样? |
特征顺序在 config.json 中严格固定,推理时 DataFrame 的列必须与之对齐。
三、品牌级特征(3 个)
| 特征 | 类型 | 含义 |
|---|---|---|
brand_industry | 类别 | 品牌行业,数据集中有 skincare / cosmetics / personal_care 三类,各 10 个品牌 |
brand_avg_campaign_engagement_score | 数值 | 该品牌历史活动的平均互动率,是天然的"先验水平"特征 |
brand_n_product_categories | 数值 | 品牌覆盖的产品品类数量 |
品牌级特征只有 3 个,但brand_avg_campaign_engagement_score非常关键——它告诉模型"这个品牌的粉丝互动基线是高是低",模型可以在此基础上叠加其他调整。
四、投放级特征(42 个):模型里最大的一族
这一族全部来自 brief(投放要求文档,通常由上游 LLM 解析提取),分为三类:
1. 单值类别特征(1 个)
brief_required_hook_type:要求的"钩子"类型,数据集中共 6 种——daily_routine(日常,62 次)、before_after(前后对比,59 次)、tutorial(52 次)、unboxing(开箱,46 次)、problem_solution(42 次)、transformation(39 次)
2. 多值类别特征 → 多热编码(31 列)
一个 brief 往往允许多个取值(如 tone 为 "energetic,fun"),因此每个候选值拆成一列 0/1 标志:
| 字段组 | 列数 | 候选取值 |
|---|---|---|
brief_required_tone__*语调 | 12 | fun、calm、confident、energetic、glam、fresh、bold、educational、active、aspirational、scientific、authentic |
brief_target_creator_tier__*达人层级 | 4 | nano、micro、mid、macro |
brief_campaign_objective__*活动目标 | 4 | awareness、trial、conversion、engagement |
brief_target_audience_gender__*目标性别 | 2 | female、male |
brief_visual_style__*视觉风格 | 4 | studio、natural、outdoor、glam_lighting |
brief_dress_code__*着装要求 | 5 | casual、stylish、activewear、colorful、bold_colors |
这种多热(multi-hot)编码是特征 schema 中最常见的设计:12 + 4 + 4 + 2 + 4 + 5 = 31列,任意组合都能表达,且 Ridge 可以为每个取值单独学一个权重。
3. 数值约束特征(10 个)
| 特征 | 含义 |
|---|---|
brief_product_placement_sec | 要求的产品露出时长(数据集中 3~11 秒) |
brief_n_required_keywords | 必含关键词数量 |
brief_n_mandatory_hashtags | 必带话题标签数量 |
brief_n_mandatory_mentions | 必带 @ 提及数量 |
brief_n_key_messages | 关键信息条数(本数据集恒为 3) |
brief_target_age_min/brief_target_age_max/brief_target_age_span | 目标年龄下限 / 上限 / 跨度(派生字段 = max − min) |
brief_duration_range_min/brief_duration_range_max | 要求的内容时长下限 / 上限 |
_span、_min/_max这类派生字段值得注意:模型既能感知"年龄 18-38"这种具体区间,也能感知"跨度 20 岁"这个区间宽窄本身。
五、内容级特征(14 个):执行细节与工程巧思
| 特征 | 类型 | 说明 |
|---|---|---|
content_upload_day | 类别 | 发布星期(7 天各约 270~310 条,分布均匀) |
content_duration_sec | 数值 | 实际时长,数据集中 8~130 秒,均值约 49 秒 |
content_upload_hour_sin/content_upload_hour_cos | 数值 | 发布小时的正余弦周期编码 |
content_is_weekend | 0/1 | 是否周末发布 |
content_n_hashtags | 数值 | 实际携带的话题标签数 |
content_caption_len_chars/content_caption_len_words | 数值 | 文案字符数 / 词数 |
content_caption_n_emoji | 数值 | 文案中的 emoji 数量 |
content_caption_n_hashtags_inline/content_caption_n_mentions_inline | 数值 | 文案正文中内嵌的话题数 / @ 提及数 |
content_sound_popularity | 数值 | 所用声音的流行度 |
content_hashtag_compliance/content_mention_compliance | 0/1 | 文案是否合规覆盖了 brief 要求的 hashtag / mention |
其中两个工程细节尤其值得学习:
- 周期编码:
upload_hour直接用数值会让模型认为 23 点与 1 点"相距 22",而sin/cos编码让它们在空间上紧邻,23 点 → 0 点 → 1 点的连续性得以保留 - 合规标志:
content_hashtag_compliance、content_mention_compliance把"brief 要求"与"实际执行"连接起来——同样的 brief 要求下,执行到位与否会产生可区分的信号
六、特征如何进入模型:Pipeline 一图流
59 列特征 DataFrame ├─ OneHotEncoder → 处理单值类别(brand_industry、hook_type、upload_day) ├─ StandardScaler → 缩放数值列与多热列 └─ Ridge (alpha=10) → 输出互动率预测值- 多热列本身已是 0/1,交给
StandardScaler统一缩放即可,无需再做 one-hot - alpha 通过
GroupKFold(按brief_id分组)网格搜索,避免同一条 brief 的内容泄漏到验证折,评估真正反映对"新 brief"的泛化能力 - 交叉验证指标:
cv_mae ≈ 0.0114、cv_rmse ≈ 0.0146、cv_r2 ≈ 0.71;而均值预测基线的 MAE 约 0.0215——模型将 MAE 降低了约 47%(完整数值见 README.md 与 config.json 的training_metrics)
七、加载与推理:列名顺序就是契约
import skops.io as sio path = "engagement_ridge.skops" # 或从模型仓库下载 model = sio.load(path) # skops 序列化,比 pickle 安全 # X 的列必须与 config.json -> feature_columns 完全一致 prediction = model.predict(X)依赖版本固定在 requirements.txt:scikit-learn==1.7.2、skops==0.14.0、numpy==1.26.4、pandas==2.3.3。该模型在 Viralst 应用中通过POST /engagement/predict端点对外提供服务。
八、使用与局限性提醒
- 上游质量决定模型质量:brief 特征依赖上游 LLM 从文档中提取,若提取缺漏,预测质量会随之下降
- 合成数据的边界:当前指标描述的是对合成关系的还原度,尚未在真实品牌投放数据上验证
- 行业覆盖:训练集仅 3 个行业 × 10 品牌,外推到新行业时应保持谨慎
总结
engagement-predictor 的特征 schema 是一份教科书级的特征工程设计清单:
- 三层结构(brand / brief / content)对应营销投放的真实决策链路
- 31 列多热编码优雅表达了"一个字段多个取值"的现实
- 周期编码、跨度派生、合规标志展示了数值特征的经典技巧
- Ridge + GroupKFold保证了正则化稳健与评估无泄漏
想动手验证?直接克隆仓库后加载 engagement_ridge.skops,用 dataset/ 中的 CSV 拼出 59 列 DataFrame,即可跑通完整推理链路 🚀
【免费下载链接】engagement-predictor
相关推荐
Emacs Writing Studio与外部工具集成:LibreOffice、ImageMagick等协同工作指南
Emacs Writing Studio与外部工具集成:LibreOffice、ImageMagick等协同工作指南 Emacs Writing Studio(
D2L.ai特征工程:数值特征、类别特征与文本特征处理完整指南
D2L.ai特征工程:数值特征、类别特征与文本特征处理完整指南 想要在深度学习项目中获得出色的模型性能吗?特征工程是关键!🚀 D2L.ai 提供了完整的特征工
人工智能深度学习机器学习教程文档Rust RFCs 特征系统深度解析:从基础特征到高级特征绑定终极指南
Rust RFCs 特征系统深度解析:从基础特征到高级特征绑定终极指南 想要真正掌握Rust编程语言的精髓?理解特征系统是关键!🚀 Rust RFCs 作为语
文档
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考