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

news2025/1/12 21:07:34

图片

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

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本送出(包邮到家)!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/915395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP 创业感悟交流平台系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 创业感悟交流平台系统(含论坛)是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码下载: https://download.csdn.…

C++中cin >> str 和 string类的getline(cin, str) 用来读取用户输入的两种不同方式的不同点

C中cin >> str 和 string类的getline(cin, str) 用来读取用户输入的两种不同方式的不同点 在C中&#xff0c;string类是标准库提供的字符串类&#xff0c;它可以帮助我们处理和操作字符串。它在<string>头文件中定义。string类提供了一系列成员函数和操作符&#…

Numpy入门(5)—应用举例

NumPy应用举例 5.1 计算激活函数Sigmoid和ReLU 使用ndarray数组可以很方便的构建数学函数&#xff0c;并利用其底层的矢量计算能力快速实现计算。下面以神经网络中比较常用激活函数Sigmoid和ReLU为例&#xff0c;介绍代码实现过程。 计算Sigmoid激活函数 计算ReLU激活函数 使…

C++ vector模拟实现

建议将vector的模拟实现写在头文件中&#xff0c;测试使用部分写在.cpp文件中 vector是类模板&#xff0c;被封装在命名空间中 部分源码&#xff1a;&#xff08;删除某些内容后&#xff09; vector模拟实现的代码&#xff1a; #include<assert.h> namespace djx {tem…

【Git分支操作---讲解二】

Git分支操作---讲解二 查看分支创建分支切换分支修改分支切换分支合并分支合并分支【冲突】(只会修改主分支不会修改其他分支)什么时候会有冲突&#xff1f; 查看分支 创建分支 切换分支 修改分支 切换分支 合并分支 合并分支【冲突】(只会修改主分支不会修改其他分支) 什么时…

国产精品:讯飞星火最新大模型V2.0

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

FL Studio2023最新版本21.1中文水果音乐编曲工具

虚拟乐器和真实乐器的区别&#xff1f;真实乐器指的是现实中需要乐手演奏的乐器&#xff0c;而虚拟乐器是计算机音乐制作中编曲师使用的数字乐器。FL Studio虚拟乐器插件有哪些&#xff1f;下文将给大家介绍几款FL Studio自带的强大虚拟乐器。 一、虚拟乐器和真实乐器的区别 …

JDK21真的来了:虚拟线程正式发布及十多项新特性!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

Docker容器与虚拟化技术:Docker-Compose单机编排工具

目录 一、理论 1.Docker-Compose 二、实验 1. Docker Compose 安装部署 2.Docker Compose撰写nginx 镜像 3.Docker Compose撰写tomcat 镜像 三、问题 1.Docker Compose 和 Dockerfile 的区别 四、总结 一、理论 1.Docker-Compose &#xff08;1&#xff09;使用场景…

渗透率超90%!智能座舱赛道迎来「存量」替代升级大周期

智能座舱赛道&#xff0c;正在迎来新一轮芯片替代潮。 相比于智能驾驶领域&#xff0c;座舱主机芯片市场并不「性感」&#xff0c;但巨大的存量替代升级机会&#xff0c;也不容小视。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-6月中国市场&#xff08;不含进出口&am…

通用语言模型蒸馏-GLMD

文章目录 GLMD一、PPT内容论文背景P1 BackgroundP2 Approach 相关知识P3 知识蒸馏P4 语言建模词预测逻辑 方法P5 两阶段词汇预测蒸馏P6P7 词汇压缩 实验结果P8 results 二、论文泛读2.1 论文要解决什么问题&#xff1f;2.2 论文采用了什么方法&#xff1f;2.4 论文达到什么效果…

C++学习笔记---- 引用

1、作用 给变量起别名 基本语法&#xff1a;数据类型 &别名 原名 示例&#xff1a; #include <iostream> using namespace std;int main() {int a 1;int &b a;cout << "a " << a << endl;cout << "b " <…

关于Map的理解

Shuffle中进行了分组聚合,而Reduce对分组聚合后的数据进行重新计算. 切片对应的是MapTask 分区对应的是ReduceTask 也可以通过设定reduce数量来调整分区数 分区规则: 设定为1时, 根本不走自定义分区器,而是Hash 如果分区数大于规则 空 如果分区数小于规则(分区数不为1) 报错 …

《金字塔原理》(表达的逻辑)

前言&#xff1a;在思考和表达上&#xff0c;很多时候显得很混乱&#xff0c;源于不了解结构化思想、表达&#xff0c;如何让话讲得更有逻辑&#xff1f;事做得更有条理&#xff1f;接触到了一本书&#xff1a;《金字塔原理》&#xff0c;通过这本书的学习&#xff0c;希望可以…

数字化营销怎么做?数字化营销系统落地重点一览

如何抓住数字化机遇&#xff0c;企业取得营销突破&#xff1f;如果说数字是一种技术、工具或数据等无形的资源&#xff0c;那么数字化则代表了某种动态的过程、资源和能力&#xff0c;如同企业经营一样始终处于流动的过程之中。当前&#xff0c;由于科技水平的不断发展&#xf…

神经网络入门

前言 本文主要介绍最基础的神经网络&#xff0c;包括其结构&#xff0c;学习方法&#xff0c; C \texttt{C} C 的实现代码。 Python \texttt{Python} Python 的代码可以搜索互联网得到。 前排提示&#xff1a;本人涉及一丁点数学知识。 神经网络的结构 神经网络包括多个层…

【ARM】Day8 中断

1. 思维导图 2. 实验要求&#xff1a; 实现KEY1/LEY2/KE3三个按键&#xff0c;中断触发打印一句话&#xff0c;并且灯的状态取反 key1 ----> LED3灯状态取反 key2 ----> LED2灯状态取反 key3 ----> LED1灯状态取反 key3.h #ifndef __KEY3_H__ #define __KEY3_H__#in…

每日两题 203移除链表元素 104二叉树的最大深度

203 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入…

【ES】笔记-迭代器

迭代器概念 迭代器(Iterator)是一种接口&#xff0c;为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&#xff0c;就可以完成遍历操作。 ES6 创造了一种新的遍历命令for…of循环&#xff0c;Iterator接口主要供for…of消费原生具备iterator接口的…

Kubernetes(K8S) kubesphere 介绍

官网地址&#xff1a;https://kubesphere.com.cn/ KubeSphere 是个全栈的Kubernetes容器云PaaS解决方案 KubeSphere 是在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器平台&#xff0c;提供简单易用的操作界面以及向导式操作方式&#xff0c;在降低用户使…