Mercari是一家运营于日本和美国的电子商务公司,主要产品是Mercari marketplace应用程序。用户可以通过该应用程序轻松买卖商品。
应用程序允许用户自由选择商品价格,但这也带来了风险,因为过高或过低的价格可能导致亏损。解决这一问题的方法是自动推荐商品价格。因此,Mercari希望为其卖家提供价格建议。
目前的问题是预测商品的价格,这属于回归问题。训练数据中的特征包括商品ID、名称、物品状况、类别、品牌名称、价格、运费以及描述。测试数据中包含所有其他特征,除了价格。
误差度量使用均方根对数误差(RMSLE)。RMSLE的计算公式如下:
$$ text{RMSLE} = sqrt{frac{1}{n}sum{i=1}^{n}(log(yi + 1) - log(hat{y}_i + 1))^2} $$
RMSLE的计算代码如下:
python
def rmsle(y_true, y_pred):
assert len(y_true) == len(y_pred)
score = np.sqrt(np.mean(np.power(np.log1p(y_pred) - np.log1p(y_true), 2)))
return score
在当今的人工智能时代,机器学习和深度学习是两个热门词汇。无论是出行预订、医疗诊断、个人助手还是产品推荐,这些技术都在改变我们的生活。我们的任务是通过自然语言处理(NLP)进行价格预测,这属于回归任务。
解决这个问题的方法之一是利用向量化技术,如TF-IDF和BoW,生成固定大小的稀疏向量表示。另一种方法是使用深层NLP架构,如卷积神经网络(CNN)、长短时记忆网络(LSTM)或门控循环单元(GRU),这些网络能够自主学习特征。
数据集来自Kaggle,这是一个流行的在线数据科学家社区。
训练数据集包含1287个类别。类别名称由“/”分隔,包含主类别、子类别1和子类别2。我们将这些类别拆分为三个新列,以便更好地预测商品价格。
共有4807个品牌,其中出现频率最高的前10个品牌如下图所示。
价格分布如下图所示。我们发现大多数商品的价格低于29美元,其中75%的商品价格低于29美元,50%的商品价格低于17美元,25%的商品价格低于10美元。平均价格约为26.7美元。
我们绘制了词云图以了解描述文字中的常见单词。这些单词在下图中展示。
商品条件分为1到5,其中1代表最佳状态,5代表最差状态。商品状况良好的商品数量较多。
通过分析价格与其他特征的关系,我们可以更好地进行特征工程。例如,我们发现当商品价格较高时,卖方支付运费的情况较多。
一些博客和论文已经提出了解决方案,包括简单的机器学习或深度学习方法。以下是几种方法:
根据参考材料,Mercari网站上的最低价格为3美元。因此,我们保留价格高于3美元的商品。
我们用适当值填充缺失值。例如,商品描述为空时,我们用“无描述”替代;品牌名称和类别名称为空时,用“缺失”替代。
价格是目标变量。训练数据分为训练集和测试集,测试集占总数据的10%至20%。
我们使用sklearn的StandardScaler函数对目标变量进行标准化。
机器学习管道使用自然语言处理技术,如BoW和TF-IDF,对文本数据进行向量化。我们添加了四个新特征:类别名称拆分、描述文字字数、商品名称长度等。
深度学习管道使用递归神经网络(RNN)处理序列数据。我们从商品名称和描述文字中获取文本特征向量,并对其他类别字段进行嵌入。所有这些共同构成了80维特征向量。
通过训练多个模型并进行模型集成,我们获得了较好的结果。模型平均集成技术降低了高方差,提升了模型性能。最终模型在Kaggle竞赛中取得了前10%的成绩。
我们尝试了几种方法来改善RMSLE,包括保留停用词、使用bigram和trigram、过滤价格数据、小批量训练和模型集成。
未来的工作可能包括使用多层感知器、结合CNN和RNN处理文本数据,增加更多GRU层或进一步微调模型。
完整代码可在GitHub上查看:GitHub链接