在线卖家商品售价自动推荐(上)
开淘宝,当微商现在*创业者的最佳选择,但很多新手在入行后发现最难的是产品定价,定的高了吧,没人会会买你的,定低了吧,都对不起自己付出的时间,并且产品定价不光受成本的影响,例如服装还要受到季节,品牌的影响,产地,产品的型号规格,历史购买价格,客户认可度等多方面影响,这里对于新手实在太难了。
我无法得到淘宝的的这方面信息,故采用日本最大的电商Mercai提供的数据,他们想向卖家提供定价建议,Mercai期望建立一个自动建议正确的产品价格的算法。算法将收到用户输入的产品文字说明,包括产品类别名称,品牌名称和商品条件等详细信息,然后给出合理定价。
这里先了解该数据集提供的有效信息:
字段 |
说明 |
Train_id |
商品ID |
name |
商品名称 |
|
销售者提供的型号 |
|
商品所属类别 |
|
商品所属品牌 |
Price |
商品售价,这个字段也就是我们要预测的字段 |
Shipping |
1 : 包邮 0 :不包邮 |
|
商品的完整描述 |
数据集截图大致如下,总共商品数为1482535个,这是个拥有上百万商品的数据集:
先来看看我们数据集里面的商品的价格区间都集中在哪里,单位是美元,这样也看看日本的物价,从直方图看商品售价分布在10~100美金区间,而最多的商品存在的价格区间是10~50美金,也就是60~350RMB,这么看日本商品的价格也不是很贵。
除了价格,我在淘宝购物时特别关注是否包邮,不包邮的商品一般要么销量不佳,要么价格超便宜,日本是否也这样呢?从直方对比图中看,10~20美金左右的产品包邮的最多,而20~50美金的产品更多的都不包邮了 ,这种情况随着价格的增长,包邮与不包邮的产品基本一半一半了,这点还是挺奇怪的,淘宝基本百元左右的都是包邮的,反而最便宜的产品要挣些快递费。
代码:
def showpricehistwithshipping(): ship_data = full_data[full_data.shipping==1]['price'] noship_data = full_data[full_data.shipping==0]['price'] plt.figure(figsize=(20, 15)) plt.hist(ship_data,bins=50,range=[0,250],label='包邮价格',alpha = 0.5 ) plt.hist(noship_data,bins=50,range=[0,250],label='不包邮价格',alpha = 0.5 ) plt.title('包邮&不包邮价格分布图') plt.xlabel('价格', fontsize=15) plt.ylabel('数量') plt.legend() plt.show() |
这种中间价格的大部分产品不包邮的现象引起了我的兴趣,我们一探究竟到底是什么原因导致了这样的情况?这里我的思路是将哪些产品包邮,哪些产品不包邮分类列出,找出其各自各种特征,这里的Item_description字段正好可以用来描述这些特征,这样我们能根据这些特征去猜测包邮与不包邮之间的关系。
代码:
def shipfeatureMap(): _full_data = full_data.loc[full_data['item_description']!='No description yet'] ship_data = _full_data[_full_data.shipping==1]['item_description'][:10000] noship_data = _full_data[_full_data.shipping==0]['item_description'][:10000] stop_words = STOPWORDS.add('rm') ship_data_text = ','.join(str(i) for i in ship_data.values) ship_wordcloud = WordCloud(background_color='black',stopwords =stop_words , max_font_size=110, min_font_size=10, mode='RGBA', font_path='source/simhei.ttf').generate(ship_data_text)
plt.imshow(ship_wordcloud) plt.axis('off') plt.show() |
这里的包邮数据的云图可以看到出现最多的词频是品牌,新品,价格固定等,其中还有个nerver used比较有趣,对比包邮不包邮的数据云图,可以看到比较大的差距在于包邮的产品更加强调Free Shipping,Price firm这些价格方面的优势,但不强调品质,而是强调没有用过,这也好理解包邮的都是面向价格敏感的用户群,而不包邮的产品则主打good condition,great condition等品质优势。
图:包邮数据云图
图:不包邮数据云图
接下来就是研究什么类型产品包邮,这里我将包邮产品数量的前十门类列出来,通过数据就会发现真相了。
包邮产品前十里面有八项都和女性相关,除了服饰就是化妆品,还有两个暂且算男性产品吧,手机和电玩,这里也解释了为什么包邮产品关键词里面有Never used了,游戏卡带和手机都表明不是二手货。
图:包邮产品前十门类
图:包邮产品前十门类(带品牌名称)
这里顺手把不包邮的商品品类和品牌也列出来做对比,这里发现个有趣的交合点,就是维密品牌的Bra分别在包邮和不包邮两大分类中上榜。
图:不包邮产品前十门类(带品牌名称)
后面的分析就有了一个重点,维密品牌的Bra在包邮和不包邮两个门类的区别是什么?在对比图中大部分关键词都一致,有趣的是不包邮的里面多了个Secret bra(情趣)描述,另外34B不包邮,34C包邮。。。这个难以解释。
先Show Code
def shipvsbar(): _full_data = full_data[full_data.brand_name == "Victoria's Secret"] ship_data = _full_data[_full_data.shipping==1] ship_data = ship_data[ship_data.category_name == 'Women/Underwear/Bras'] ship_data_desc = ship_data.item_description
noship_data = _full_data[_full_data.shipping==0] noship_data = noship_data[noship_data.category_name == 'Women/Underwear/Bras'] noship_data_desc = noship_data.item_description
stop_words = STOPWORDS.add('rm')
ship_data_text = ','.join(str(i) for i in ship_data_desc.values) ship_wordcloud = WordCloud(background_color='black',stopwords =stop_words , max_font_size=110, min_font_size=10, mode='RGBA', font_path='source/simhei.ttf').generate(ship_data_text)
noship_data_text = ','.join(str(i) for i in noship_data_desc.values) noship_wordcloud = WordCloud(background_color='black',stopwords =stop_words , max_font_size=110, min_font_size=10, mode='RGBA', font_path='source/simhei.ttf').generate(noship_data_text) fig = plt.figure() ship_ax = fig.add_subplot(121) ship_ax.imshow(ship_wordcloud) ship_ax.set_title("包邮云图")
noship_ax = fig.add_subplot(122) noship_ax.imshow(noship_wordcloud) noship_ax.set_title("不包邮云图")
ship_ax.axis('off') noship_ax.axis('off') plt.show() |
那价格方面包邮不包邮有什么差别呢?从数据里看不包邮的占到63%左右,而价格方面不包邮的总体价格也更稍微高一些,而且卖的贵的都是不包邮的。