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

图片

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

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.mzph.cn/news/48710.shtml

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

相关文章

jmeter-results-detail-report_new.xsl文件设置dateReport

<!-- Defined parameters (overrideable) <td bgcolor"#ff00ff"> --> <xsl:param name"showData" select"y"/> <xsl:param name"titleReport" select"测试报告"/> <xsl:param name&…

lama-cleaner:基于SOTA AI 模型Stable Diffusion驱动的图像修复工具

介绍 由 SOTA AI 模型提供支持的图像修复工具。从照片中删除任何不需要的物体、缺陷、人物&#xff0c;或擦除并替换&#xff08;由Stable Diffusion驱动&#xff09;照片上的任何东西。 特征 1.多种SOTA AI模型 擦除模型&#xff1a;LaMa/LDM/ZITS/MAT/FcF/Manga 擦除和替…

数据结构——布隆计算器

文章目录 1.什么是布隆过滤器&#xff1f;2.布隆过滤器的原理介绍3.布隆过滤器使用场景4.通过 Java 编程手动实现布隆过滤器5.利用Google开源的 Guava中自带的布隆过滤器6.Redis 中的布隆过滤器6.1介绍6.2使用Docker安装6.3常用命令一览6.4实际使用 1.什么是布隆过滤器&#xf…

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

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

[Mac软件]Pixelmator Pro 3.3.12 专业图像编辑中文版

Pixelmator Pro是专为Mac设计的功能强大&#xff0c;美观且易于使用的图像编辑器。借助广泛的专业级无损图像编辑工具&#xff0c;Pixelmator Pro可使您发挥出最佳的照片效果&#xff0c;创建华丽的构图和设计&#xff0c;绘制&#xff0c;绘画&#xff0c;应用令人惊叹的效果&…

【OpenGauss源码学习 —— 执行算子(Result 算子)】

执行算子&#xff08;Result 算子&#xff09; 控制算子Result 算子ExecInitResult 函数ResultState 结构体ExecInitResultTupleSlot 函数ExecAllocTableSlot函数 ExecResult 函数TupleTableSlot 结构体ExecProcNode 函数ExecProcNodeByType 函数ExecProject 函数 ExecEndResul…

【MyBatis】动态SQL > 重点:${...}和#{...}与resultMap和resultType的区别

目录 一、MyBatis动态sql 1.1 动态sql的作用 1.2 动态sql作用论证 1.2.1 条件判断&#xff1a;<if> 1.2.2 循环迭代&#xff1a;<foreach> 1.2.3 SQL片段重用 1.2.4 动态条件组合&#xff1a;<choose><when><otherwise> 1.2.5 <where…

UE4/5Niagara粒子特效之拖尾渐变

目录 开始操作 发射器一的制作 添加新的模块 ​编辑 让粒子长久存在 添加颜色 发射器二的制作 第三人称模板添加Niagara 效果 添加颜色 效果 隐藏第一个发射器 开始操作 首先创建一个粒子系统&#xff0c;用Fountain这个模板&#xff1a; 发射器一的制作 将不需要的…

【大数据】Flink 详解(五):核心篇 Ⅳ

Flink 详解&#xff08;五&#xff09;&#xff1a;核心篇 Ⅳ 45、Flink 广播机制了解吗&#xff1f; 从图中可以理解 广播 就是一个公共的共享变量&#xff0c;广播变量存于 TaskManager 的内存中&#xff0c;所以广播变量不应该太大&#xff0c;将一个数据集广播后&#xff0…

代码随想录算法训练营(回溯总结篇)

回溯也可以说是暴力搜索&#xff08;最多剪枝一下&#xff09;。回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 一.分类 1.组合问题 &#xff08;1&#xff09;按组合元素的个数 &#xff08;2&#xff09;按组合元素的总和 有重复元素 同一元素可以重复选&#x…

【LeetCode-中等题】3. 无重复字符的最长子串

题目 题解一&#xff1a;单指针&#xff0c;滑动窗口 思路&#xff1a; 设置一个左指针&#xff0c;来判断下一个元素是否在set集合中&#xff0c;如果不在&#xff0c;就加入集合&#xff0c;right继续&#xff0c;如果在&#xff0c;就剔除重复的元素&#xff0c;计算串的长度…

如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【PHP】PHP常见语法

文章目录 PHP简介前置知识了解静态网站的特点动态网站特点 PHP基础语法代码标记注释语句分隔(结束)符变量变量的基本概念变量的使用变量命名规则预定义变量可变变量变量传值内存分区 常量基本概念常量定义形式命名规则使用形式系统常量魔术常量 数据类型简单&#xff08;基本&a…

RISC-V(1)——RISC-V是什么,有什么用

目录 1. RISC-V是什么 2. RISC-V指令集 3. RISC-V特权架构 4. RiscV的寄存器描述 5. 指令 5.1 算数运算—add/sub/addi/mul/div/rem 5.2 逻辑运算—and/andi/or/ori/xor/xori 5.3 位移运算—sll/slli/srl/srli/sra/srai 5.4 数据传输—lb/lh/lw/lbu/lhu/lwu/sb/sh/sw …

2023.8.8巨人网络数据开发工程师面试复盘

1 概述 问题一览 总体感觉良好&#xff0c;通过面试官的介绍可知这个岗位偏向离线数仓。 1.自我介绍 2.询问了其中一段实习经历 3.讲下你说用过的Linux命令 4.讲下HIVE的内部表和外部表有什么不同 *5.讲下你使用过的Hive函数&#xff08;好好在复习下多准备几个吧&#xff09…

算法随笔:强连通分量

概念和性质&#xff1a; 强连通&#xff1a;在有向图G中&#xff0c;如果两个点u和v是互相可达的&#xff0c;即从u出发可以到达v&#xff0c;从v出发也可以到达u&#xff0c;则成u和v是强连通的。 强连通分量&#xff1a;如果一个有向图G不是强连通图&#xff0c;那么可以把它…

第 7 章 排序算法(1)(介绍,分类,时间复杂度,空间复杂度)

7.1排序算法的介绍 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 7.2排序的分类&#xff1a; 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。外部排序法&#xff1a; 数据量过大&am…

基于CentOS搭建私有仓库harbor

环境&#xff1a; 操作系统&#xff1a;CentOS Linux 7 (Core) 内核&#xff1a; Linux 3.10.0-1160.el7.x86_64 目录 安装搭建harbor &#xff08;1&#xff09;安装docker编排工具docker compose &#xff08;2&#xff09;下载Harbor 安装包 &#xff08;3&…

chapter 3 Free electrons in solid - 3.1 自由电子模型

3.1 自由电子模型 Free electron model 研究晶体中的电子&#xff1a; 自由电子理论&#xff1a;不考虑离子实能带理论&#xff1a;考虑离子实&#xff08;周期性势场&#xff09;的作用 3.1.1 德鲁德模型 Drude Model - Classical Free Electron Model (1)德鲁德模型 德鲁…

【3Ds Max】可编辑多边形“边”层级的简单使用

目录 简介 示例 1. 编辑边 &#xff08;1&#xff09;插入顶点 &#xff08;2&#xff09;移除 &#xff08;3&#xff09;分割 &#xff08;4&#xff09;挤出 &#xff08;5&#xff09;切角 &#xff08;6&#xff09;焊接 &#xff08;7&#xff09;桥 &…