机器学习实践项目(三)- Mercari二手商店价格预测 - 项目介绍

🔥 Kaggle Mercari 商品价格预测:一篇带你从“懵”到“懂”的实战指南

这篇文章,是我在做 Kaggle 的 Mercari Price Suggestion Challenge 时的一些总结和踩坑记录。
不是学术论文,也不是硬邦邦的官方文档,而是一个普通开发者在 Kaggle 上“一边掉头发一边调模型”的真实心得。
如果你也想搞懂推荐/定价模型、稀疏矩阵、TF-IDF、SVD、Ridge 回归这些关键技能,我相信这篇文章你会喜欢。


1. 项目背景:Mercari 想让 AI 来帮用户“估价”

Mercari 是日本版的 “闲鱼”。
你卖东西时要自己填标题、描述、品牌、类别、成色……
平台想用算法来预测一个合理价格,让新手卖家别乱标价。

比赛的目标很简单:

👉 根据商品信息预测最终售价

你要做的是一个“自动估价系统”。

数据不小,一共有:

  • 148 万条训练数据
  • 73 万条测试数据

而且里面掺了大量文本字段,是一个典型的“结构化 + NLP”混合难题。


2. 数据长啥样?(一句话:该有的全有)

核心字段包括:

字段含义
name商品标题(字数不多但很关键)
item_description商品描述(文字又多又乱)
brand_name品牌(缺失超级多)
category_name三层类别(A/B/C 格式)
item_condition_id成色(1=新)
shipping1=包邮
price目标值

做过电商模型的同学看到这个字段列表,大概率直呼:

“这不就是我上班每天在做的东西吗?”

很对,这个项目真的很贴近实际业务。


3. 为什么几乎所有人都先对价格取 log?

原始价格分布是“典型长尾”。
便宜货一大堆,几千几万的贵价货偶尔来一个。

直接预测原始价格,模型会被大额数据支配。

于是我们都这么干:

y_log = np.log1p(price)

预测时再:

pred_price = np.expm1(pred_log)

Kaggle 的评估指标是 RMSLE(对 log 空间更友好),
所以这波算数据科学家与数学家双赢。


4. 特征工程:关键中的关键

如果你只想跑通 baseline,那推荐直接跳到后面;
如果你真想把模型分数干到“看起来还挺像回事儿”,特征工程一定要好好做。


4.1 文本特征:真正的核心武器(毫不夸张)

  • name
  • item_description

这两个字段完全决定你的模型上限。

为什么?
因为定价最关键的信息,都藏在文字里:

  • 品牌型号(iPhone 14?AirPods?)
  • 成色(like new、broken)
  • 配件(with charger)
  • 使用情况(barely used once)

最经典的做法是:

👉 TF-IDF(1~2 gram) → 稀疏高维向量

用 sklearn 就行:

TfidfVectorizer(ngram_range=(1,2), min_df=2, dtype=np.float32)

4.2 类别特征:One-Hot + 分层 Target Encoding(TE)

brand_name

  • 缺失特别多
  • 不需要全部保留,取前几千个出现频率最高的就够了

category_name

拆成三层:

cat1 / cat2 / cat3

你既可以做 One-Hot,也可以做 Target Encoding。
我个人感觉——:

TE(分层)更符合人类对“类别价格”的认知

示例:

  • cat1_te:顶层类别均价
  • cat2_te:二层类别均价(不足回退 cat1)
  • cat3_te:三层类别均价(不足回退 cat2 → cat1)

这是结构化特征的“灵魂补丁”。


4.3 数值特征:简单但有用

  • shipping(包邮通常更便宜)
  • item_condition(成色越新越贵)
  • 以及前面算好的 TE 特征

全部转成稀疏矩阵,与 TF-IDF 拼起来就对了。


5. 稀疏矩阵大拼装:四大块拼成一个超大 CSR

训练数据是上百万条,特征维度可能十几万甚至几十万。

普通 numpy 肯定 GG,所以我们用 稀疏矩阵 CSR

from scipy.sparse import hstack

X = hstack([X_name, X_desc, X_cat, X_num], format='csr')

能省掉成吨的内存。


6. SVD 降维:把“词袋稀疏”变成“语义密集”

稀疏 TF-IDF 特征虽然强,但维度太大,噪声也多。
所以我们用:

👉 TruncatedSVD(n_components=300~500)

你没看错,一个本来几万维的特征,压成 400 维还能保持语义。

这一步对模型效果提升非常明显。


7. 模型选择:Ridge 回归是这个任务里的“小钢炮”

很多不熟 Kaggle 的同学一看项目就想上 XGBoost/LGBM。
当然可以,但有一说一:

在大规模稀疏文本任务里,Ridge 是真正的性价比之王

  • 训练快
  • 内存友好
  • 不容易过拟合
  • 对 SVD 后的特征响应特别强

结合 TF-IDF + SVD,能把 RMSLE 做到 0.43 左右(很优秀)。


8. 验证与反变换:几行代码的小细节

预测完 log 值后一定要安全还原:

val_pred = np.expm1(val_pred_log)
val_pred = np.clip(val_pred, 0, None)
val_pred[~np.isfinite(val_pred)] = 0

这样能避免负价格、inf、NaN 等坑人情况影响得分。


9. 模型效果参考

方法RMSLE
无文本特征~0.52
TF-IDF + Ridge0.46~0.47
+ SVD0.43~0.44
多模型融合0.42~0.43

如果你做到 0.43,基本就是 leaderboard 中上水平。


10. 我对这个项目的真实感受

  • 这是一个练习文本特征工程的神级项目
  • 也是理解稀疏矩阵处理流程的最佳机会
  • 更是企业真实推荐/定价系统的“缩影”
  • 数据大、字段乱、文本噪声多,很贴近真实业务
  • 如果你未来要靠 NLP + 结构化模型吃饭,这项目必须做一遍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值