数据分析实战│价格预测挑战【文末赠书】

2023-08-23 09:01:32

图片

文本分析是指对文本信息的表示及特征项的选取,商品文本的描述能够反映特定立场、观点、价值和利益。考虑到网上海量的商品数量,对产品的定价难度很大,因此可以使用商品描述帮助商户定价。比如,服装具有较强的季节性价格趋势,受品牌影响很大,而电子产品则根据产品规格波动。因此,根据商品提供的文本信息进行合理地定价,能够有效地帮助商家进行商品的销售。

01、问题描述及数据挖掘目标

本案例给出物品的商品描述、商品类别和品牌等信息,并结合之前的商品价格来给新商品定价格。

02、数据导入和预处理

导入数据处理阶段使用的库函数,numpy和pandas用于数据处理

import numpy as np
import pandas as pd

 使用pandas库的read_csv函数导入数据,示例代码中的csv路径和本地csv路径保持一致。

1) 数据导入

train data=pd.read csv( ../data/4/train.csv'sep='\t')
test data = pd.read csv('../data/4/test.csv', sep='\t')

可以观察数据的信息,得到当前数据的字段含义:

图片

观察可知,数据由8个字段构成,其中train_id表示训练序号,name表示商品名称,item_condition_id表示当前的物品状态,category_name表示商品类别,brand_name表示品牌名称,price表示商品价格,shipping表示是否需要邮费和item_description表示商品描述。

2) 数据预处理

首先观察数据中的缺失值和异常值,然后针对不同字段数据进行预处理操作。

In[4]:train data.info()
Out[4]:RangeIndex: 2009 entries,  to 199999Data columns (total 8 columns):train id
200009 non-null int64
name
20gga9 non-null object
item condition id
200a09 non-null int64
199148 non-null object
category name
brand name
114600 non-null object
price
20@a99 non-null float64
shipping
20g099 non-null int64
200009 non-null objectitem description

观察数据发现category_name和brand_name两个特征不足200000,即存在缺失值,因此需要对缺失值进行处理。同理,测试集合也存在类似缺失值问题,需要拼接训练集合和测试集合对数据进行数据预处理。拼接代码如下所示:

In[5]: df = pd.concat([train data, pre data], axis=0)

两个缺失值字段都为字符串类型的字段,给缺失值填充标识符的代码如下所示。

In[6]
df=df.drop(['price'train id'], axis=1)test iddf['category_name']=df['category_name'].fillna( 'MISs').astype(st
df['brand name']=df['brand name'].fillna( 'MISS').astype(str)df['shipping']=df['shipping'].astype(str)dfr'item condition id'=dfr'item condition id'].astype(str)

对category_name和brand_name两个特征填充缺失值标志,同时将整数的字符数据变成相应的字符串数据表示并提取训练过程中需要的预测值。

In[7]: y train = np.log1p(train datal'price'])

03、数据探索和模型构建

通过前面的数据预处理过程,数据都变成了字符串数据类型,因此可以采用自然语言处理的相关方法处理。首先构建方法让文本信息向量化,为进一步分析提供依据,代码如下所示。

In[8]:from sklearn.feature extraction.text import CountVectorizer,
TfidfVectorizer
default preprocessor = CountVectorizer().build preprocessor()
def build preprocessor 1(field):
field_idx = list(df.columns).index(field)
return lambda x: default preprocessor(x[field idx7)

上面的方法可以对相应特征字段的文字内容向量化,同时需要使用各个字段的向量信息变成产品的表示,因此直观地将所有的特征信息表示拼接成最后的商品表示。我们调用sklearn中的FeatureUnion来拼接商品的特征,代码如下所示。

In[9]:from sklearn.pipeline import FeatureUnion
vectorizer=FeatureUnion([
('name',CountVectorizer(ngram range=(1,2),max features=50000,
preprocessor=build preprocessor 1('name'))),
('category name',CountVectorizer(token pattern='.+
preprocessor=build preprocessor 1('category name')))
('brand name',CountVectorizer(token pattern='.+
preprocessor=build preprocessor 1('brand name'))).
('shipping',CountVectorizer(token pattern=' d+'
preprocessor=build preprocessor 1('shipping')))
('item condition id',CountVectorizer(token pattern=' d+'
preprocessor=build preprocessor 1('item condition id')))('item description',TfidfVectorizer(ngram range=(1,3),
max features=100000,preprocessor=build preprocessor_1('item description'))),
)]

上述操作将每个对应字段的文字信息变成向量表示,考虑到产品的描述信息往往会很多,因此我们在处理的过程中为了过滤掉部分无用信息,使用tfidf对文本进行向量化处理,保证了文本表示的质量。

得到商品的向量表示后,通过岭回归线性模型来对商品特征进行分析拟合,下面引入岭回归算法。

In[10]: from sklearn.linear model 
import Ridge
ridgeClf = Ridge(solver='auto',fit intercept=True,alpha=0.5.
max_iter=100,normalize=False,tol=0.05)

alpha对应岭回归正则化项的大小,alpha越大,对向量表示的正则化越强。我们使用FeatureUnion得到的对象vectorizer,再将商品信息转换为向量表示。同时,按照数据原始划分将数据变成的训练数据和测试数据。

In[11]: X = vectorizer.fit transform(df.values)
nrow train = train data.shape[0]
X train = X[:nrow train]
X test = XInrow train:]

使用岭回归算法对数据进行拟合,学习模型中相应的参数。

In[11]: ridgeClf.fit(X train, y train)

同时,我们使用训练好的模型分析测试数据,预测商品的价格大小。

In[12]: test price = ridgeClf.predict(x test)

预测结果评价,通过MSLE进行评估,使用sklearn.metrics中的mean_squared_log_error来实现。

In[13]:from sklearn.metrics import mean squared log error
true_price=pd.read csv("../data/4/label test.csv"sep="\t").price.tolist()
mean squared log error(true price, test price)
0ut[13]: 3.006566863415081

数据输出得到的test_price是模型对测试商品的预测价格,得到的预测价格越精确,对于商家定价的帮助就越大。该模型是相对简单的模型,对于文本信息没有考虑文本本身的性质,只是简单考虑特征的统计信息。并且将每个特征信息进行拼接,取得的效果不会很好。更进一步的方法,可以使用神经网络对文本进行建模。商品定价回归不同于文本分类,并不是截取单个关键字就可以对价格进行分析,并且关键词之间有较强的关联:比如苹果+手机产生的价格远远高于他们各自价格相加。同时对于拥有大量信息的冗长文本,使用神经网络在输入端提取特征是一个很好的选择。同时,商品信息中有普通的数值特征、商品分类特征、商品名称+商标的短文本以及商品详细长文本的信息。相较于将所有特征都转换为文字类特征,普通数字特征可以使用多层全连接网络形成数字特征表示,并且结合注意力机制得到有意义的文本内容表示。同时,对商品名称和商品品牌的文本内容拼接起来,能够防止商品名称和商品品牌内容过短的问题并能够有效抑制特征缺失的问题,形成统一的文本表示特征。

04、文末赠书

ClickHouse是大数据实时分析领域的主流选择之一。ClickHouse的目标是向人们提供世界上最快的分析型数据库。在各种OLAP查询引擎评测中,ClickHouse的查询性能横扫各大OLAP数据库引擎,尤其是Ad Hoc即席查询性能,一直遥遥领先。因此,ClickHouse被广泛应用于即席查询业务场景中。

ClickHouse的设计思想非常优秀,代码和架构都值得深入研究。ClickHouse团队精益求精的精神更值得我们每个人学习。虽然要快速迭代ClickHouse,但是ClickHouse团队依然不会放低要求,比如为了使用1个算法,会至少尝试10个算法,而且在选择了某个算法后,后续还会继续尝试其他更多算法,以便下次迭代时使用。正是由于这种精益求精、追求极致的态度,才有了ClickHouse的极致性能。

为你推荐一本ClickHouse领域集大成之作:《ClickHouse入门、实战与进阶》

本书从基础知识、实现原理、项目实战、扩展应用4个维度全面展开,表述简练清晰、案例丰富实用,既可以作为入门的标准参考书,又适合作为案头速查手册。书中内容是作者在阿里巴巴、字节跳动多年实战经验的总结,得到了字节跳动和阿里巴巴9位大数据专家的高度评价。

参与方式:文章三连,并任意评论参与抽奖,48小时后,程序自动抽取5本送出(包邮到家)!

 

更多推荐

.Net Core中Host的作用和用法

Host简介在ASP.NETCore中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。Host是通过使用IHostBuilder接口和Host.Cr

计算机竞赛 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录0前言1机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别2深度学习-人脸识别过程人脸检测人脸识别MetricLarning3最后0前言🔥优质竞赛项目系列,今天要分享的是🚩深度学习机器视觉人脸识别系统该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🥇学长这里给一个题目综合评分(每项满分5分)

计算机毕设 opencv python 深度学习垃圾图像分类系统

文章目录0前言课题简介一、识别效果二、实现1.数据集2.实现原理和方法3.网络结构最后0前言🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业

Anaconda和Pycharm详细安装 配置教程

Anaconda:是一个开源的Python发行版本,其中包含了conda、Python等180多个科学包及其依赖项。【Anaconda下载】PyCharm:PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。【PyCharm下载】Anaconda的安装及环境配置一

JavaScript面试题整理(二)

数据类型篇13、其他值到字符串的转换规则?Null和Undefined类型,null转换为‘null’,undefined转换为‘undefined’Boolean类型,true转换为‘true’,false转换为‘false’Number类型的值直接转换,不过那些极小和极大的数字会使用指数形式Symbol类型的值直接

React(react18)中组件通信04——redux入门

React(react18)中组件通信04——redux入门1.前言1.1React中组件通信的其他方式1.2介绍redux1.2.1参考官网1.2.2redux原理图1.2.3redux基础介绍1.2.3.1action1.2.3.2store1.2.3.3reducer1.3安装redux2.redux入门例子3.

算法、数据结构、计算机系统、数据库MYSQL、概率论、数学实验MATLAB、数学建模、马原、英语、杂项、QT项目

算法冒号表达式(condition)?x:y可以三个条件以此类推(condition1)?x:(condition2)?y:z判断三角形最简单的办法boolcanFormTriangle(inta,intb,intc){return(a+b>c)&&(b+c>a)&&(a+c>b);}带空格的数据输入#include<

【ROS入门】创建工作空间与功能包

文章结构工作空间文件结构创建工作空间流程创建工作空间编译工作空间设置环境变量/创建功能包创建功能包编译功能包检查环境变量工作空间文件结构工作空间(workspace)是一个存放工程开发相关文件的文件夹,类似于在windows中使用IDE创建的工程。主要分为以下四个文件夹:src:代码空间(SourceSpace):用于

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

【2023,学点儿新Java-27】是的——C语言中的const关键字 | 附:按照类型 快速了解与划分:C语言中的关键字 | goto关键字解释

前情回顾:【2023,学点儿新Java-26】关键字介绍+示例代码:assert断言(如何启用断言),以验证一个数组的长度是否不为零为例说明【2023,学点儿新Java-25】如何解决浮点计算存在误差:strictfp|如何保护敏感信息,提高程序的可靠性和安全性:transient|附:Java异常处理关键字介绍【20

Spring Boot启动源码分析

一,前言版本:spring-boot-starter-parent版本为2.3.0SpringBoot项目的启动入口是一个main方法,因此我们从该方法入手即可二,源码分析跟踪run方法/***SpringApplication的方法*@paramprimarySource启动类的class*@paramargs启动参

热文推荐