基于京东手机销售数据用回归决策树预测价格 (4)

提取特征值和目标值。 (考虑到各种手机品牌的型号数量毕竟很有限,而且部分品牌数据量较少,我们在这里就没有划分训练集和测试集了)

x=to_model.iloc[:,1:].values y=to_model.iloc[:,0].values

训练回归决策数模型

model=DecisionTreeRegressor() model.fit(x,y)

输出结果:

DecisionTreeRegressor(criterion=\'mse\', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter=\'best\')

检验我们的模型对各个品牌的预测准确性。

error_list=[] for each in df[\'brand\'].value_counts().index: to_fill=\'brand_{}\'.format(each) x_data=to_model[to_model[to_fill]==1].iloc[:,1:].values y_data=to_model[to_model[to_fill]==1].iloc[:,0].values test_result=model.predict(x_data) merror=mae(y_data.reshape(len(y_data),1),test_result.flatten()) error=(np.abs(test_result-y_data)/y_data).mean() print(each,end=\' : \') print(np.round(merror,2),end=\', \') print(str(np.round(error*100,3))+\'%\') error_list.append([each,merror,error])

输出结果:

HUAWEI : 238.55, 15.16% XIAOMI : 202.0, 12.277% Apple : 663.28, 8.087% OPPO : 177.65, 9.582% vivo : 134.78, 8.747% Philips : 7.01, 2.841% MEIZU : 51.79, 3.009% SAMSUNG : 269.2, 3.24% K-Touch : 7.23, 4.144% NOKIA : 12.5, 1.321% lenovo : 33.33, 3.374% Meitu : 120.0, 6.141% smartisan : 0.0, 0.0% realme : 0.0, 0.0% nubia : 0.0, 0.0% 360 : 0.0, 0.0% BlackBerry : 0.0, 0.0% Coolpad : 0.0, 0.0% ZTE : 0.0, 0.0% chilli : 0.0, 0.0% error_df=pd.DataFrame(error_list,columns=[\'brand\',\'mean_absolute_error\',\'mean_proportional_error\']) error_df

输出结果:

基于京东手机销售数据用回归决策树预测价格

以上的 DataFrame error_df 表示该决策树模型对于每个品牌手机预测的准确性,误差都均在 15% 以内,这个模型还是相对比较准确的。 实际上这个模型最关键的是提取了手机的重量weight这一关键信息,因为每个型号的手机重量多少是有些区别的,拿一个稍微精确一点的电子秤便能量出区别,决策数只不过是记住了数据而已。造成预测结果误差的原因我想多半还是因为不同的卖家对同一型号手机的标价不同吧。

项目总结

虽然没有详细地呈现数据采集以及数据清理的过程,但是这两个步骤确是所花时间最多的步骤。虽然京东的网页对于爬虫新手已经十分友好,但是头一回爬取 javascript 渲染后的价格、评论数据还是颇有挑战性。数据清理主要难点在于数据大多以自然语言呈现,要找到实际上的缺失值,以及将自然语言转变为数值(比如评论数 comments,后置摄像头数量 rear cameras )。除去写这个 kaggle kernel,这两个步骤大概花了所有时间的70%。 对于采集到的数据进行分析也不是之前想象到的那么容易,为了发掘更深一层次的信息,对于每一次通过 pandas 函数得到的结果都需要认真地分析结果,思考为什么会有这个结果。 总之,这次项目挑战收获还是比较大,也是头一次自己完成数据的采集,清洗,以及分析的全过程。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzsys.html