基于文本特征的价格模型

摘要:

二手市场相对于新品市场的核心竞争力在于其价格优势。对于二手市场的消费者的核心诉求是找到保证质量的前提下找到价格优惠的商品。但相较于新品市场,二手市场作为C2C市场,商品更加非标准化,交易场景更加非标准化,因此给二手商品提供的合理的定价,引导买卖双方在合理的价格区间达成交易,能极大提高二手交易的效率。

日本大型的电商APP Mercari发起并赞助了Mercari PriceSuggestion Challenge,详细请参考(https://www.kaggle.com/c/mercari-price-suggestion-challenge)。竞赛的内容是根据Mercari提供的商品描述、标题、类目等信息预估商品的价格,例如下面两个毛衣的价格分别为$335和$9.99,我们可以通过商品的描述判断其相应的价格。

Evaluation metric是模型的RMSLE (Root Mean Squared Logarithmic Error),具体的细节我们会在下文展开。竞赛的first placewinner在测试数据集上的RMSLE达到了0.3875。由于这个竞赛跟我们的课题非常类似,因此我们也在Mercari提供的数据集上进行了一些尝试。我们的模型精度达到0.3873,与第一名的结果基本持平。下面我们会展开我们对这个问题的解决思路和详细的结果。

正文

1.数据分析和处理

Mercari提供的价格数据包括如下信息:商品的标题、商品的描述、商品的类目、商品的新旧程度(离散变量),商品是否包邮,商品的价格。现在我们有训练集和测试集两个数据集,其中训练集有118.6万数据,测试集有29.6万数据。

建模前我们首先解决以下两个问题:(1)如何选择合适的loss function(2)如何处理数据作为模型的输入.

首先,我们的目标是预测商品的价格,是一个回归模型,所以我们的loss function应该用RMSE;另外商品的价格是一个非负的实数,所以价格模型及其loss function都应该是在logarithmicscale上的。同时logscale把小的数值拉的更远,让大的数值之间拉的更近。也就是说log(10)与log(20)之间的距离等同于log(100)与log(200)之间的距离。这样我们的模型就不会被少数价格高的商品的数据所主导。结合以上两点,我们选取RMSLE(如下所示)作为loss function是合适的,其中是预测价格,是真实价格。

其次,数据应该以什么形式作为模型的输入,商品的类目、商品的新旧程度,商品是否包邮作为离散标量,我们可以直接用one hot key encoding将其向量化,商品的标题和商品的描述作为文本输入,可以有多种处理方式,我们尝试了两种方案,(1)用其TFIDF vector作为文本的向量化表示,(2)基于word embedding的GRU模型。下面我们展开介绍这两个方案。

2.基于TFIDF特征的多层神经网络模型(MLP)

影响商品的价格的文本信息包括商品标题和商品和描述,商品标题通常是关键词的堆砌,商品描述中对价格影响比较大的通常也是商品的型号、品牌、新旧程度等关键词,因此在价格预估模型中TFIDF的performance要优于sequential模型(例如LSTM或GRU模型)。但并不是说GRU模型对于优化价格模型完全没有增益,之后我们会提到,GRU模型能够很大的提高ensemble模型的准确度。

2.1基于TFIDF的MLP模型

模型的第一步是把商品的文本特征变换成TFIDF特征向量表示,我们可以用sklearnpackage中的函数tfidfvectorizer实现这一点。同时这里我们把商品的标题独立于商品的描述,单独extract其TFIDF,主要原因是相比描述,标题对商品价格有更大的影响作用。然后基于商品的向量化表示,我们建了一个五层的神经网络,采用RELU激活函数。具体结构如下图表示:

我们发现把模型在同一训练样本上训练多次,然后emsemble多个模型的结果可以提高模型在测试集上的预测效果。同时我们可以把文本的TFIDF向量二值化,即所有的非输入设为1,为的输入依旧为,这样我就会增加一个训练集。因此我们把MLP模型在原始训练集上训练两次,在二值化后的训练集上训练两次。发现基于原数据的MLP单模型在测试集上的RMSLE为0.4138,基于二值化后的数据的MLP单模型在测试集上的RMSLE为0.4179,4个模型emsemble后的RMSLE为0.3952

2.2 MLP模型的变种

常识告诉我们商品标题的文本信息与商品的类目是密切相关的,通过数据分析我们也发现不同的关键词在不同类目下的分布完全不同。虽然一个好的神经网络模型可以catch到不同变量之间的相关性,但我们依然尝试了人为地加入了标题和类目间的交叉结构,其模型结构如下:

类似的我们把该MLP模型在原始样本上训练两次,在二值化后的样本上训练两次。基于原始样本的单模型在测试集上的RMSLE为0.4151,基于二值化后的数据的单模型在测试集上的RMSLE为0.4166,四次训练emsemble后的RMSLE为0.3977

3.基于GRU的循环神经网络模型

LSTM和GRU是比较常用的基于文本序列的模型,相较于LSTM, GRU模型的参数少,训练比较快,这里我们采用了GRU模型。虽然GRU模型的单模型performance相比基于TFIDF的多层神经模型要差些,但由于GRU模型的模型结构和TFIDF模型的模型结构有很大差异,可以极大的提高ensemble模型的准确率。

以商品的标题为例,首先通过padding(right padding)把所有商品标题变为同一长度,标题太短的情况下右边补,然后通过one hot key的编码方式将每个word转换为向量形式,向量的维度为词典的大小,然后连接一个word embedding层对其进行降维,商品标题中的每个词依次进入GRU层,产出一个向量代表商品标题;用这种方式把商品标题和描述都转化为其相应的向量表示,然后跟其他特征一起输入到下一层。具体的结构如下

在GRU模型中标题和商品描述可以共用一个word embedding layer,这样可以减少模型参数,提高训练速度。我们发现GRU模型单模型的RMSLE为0.4223,同一模型在训练数据上训练四次,然后ensemble其预测结果,得到ensemble模型的RMSLE为0.4152。

4.模型Ensemble

通过以上实验我们发现,由于商品的描述,尤其是标题通常是关键词的堆叠,基于TFIDF的MLP模型更适用于解决‘基于商品描述预测商品价格’的问题。但由于GRU模型的模型结构完全不同于MLP模型,所以三个结构迥异的模型ensemble后,反而会显著的模型整体的准确率。这里ensembling的方法我们采用的是不同模型的加权平均。模型2.1和模型2.2ensemble后的rmsle降低为0.3916(theensembled prediction is average of the outputs from model 2.1 and model 2.2),三个模型ensemble后rmsle降低为0.3873(the final ensembled prediction is weighted average of the outputs from thefirst ensembling step with weight 3/4 and the outputs from model 3 with weight1/4)。

5.总结

基于文本信息的价格预估模型的商业化应用目前不是很多,我们看到基于文本的模型很好的解决了商品数据非结构化的问题,未来还可以结合商品的图片特征,以及优化ensemblemethod例如尝试boostingand stacking(another predictionmodel is built on top of the base models and take the predictions from the basemodels as input)等方法,进一步对模型进行优化。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180510G0VTDW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券