淘宝和天猫母婴用品(Baby Goods)

  • 数据来源
  • 数据预处理
  • 缺失值处理
  • 特征工程
  • 降维
  • 建模
  • 输出结果

数据来源

阿里云天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=45

了解背景:

  • Ali_Mum_Baby含有购买数据,包含超过买家购买信息,这些信息由共享信息的消费者提供,以便接收更好的推荐或搜索结果。
  • Tianchi_mum_baby有婴儿信息数据,包含了淘宝或天猫消费者提供的孩子的生日和性别。

预测指标:

  • 根据父母的购买行为来预测孩子的年龄。
  • 或者根据孩子的信息(年龄,性别等)来预测用户会购买哪种商品。

预览数据:

购买数据

标签(Ali_Mum_Baby) 定义
user_id 用户id
auction_id 购买行为编号
cat_id 商品种类ID
cat1 商品属于哪个类别 XX:XX;XX:XX;…
property 商品属性
buy_mount 购买数量
day 购买时间 年月日 ‘YYYYMMDD’

婴儿信息

标签(Ali_Baby) 定义
user_id 用户id
birthday 出生日期
gender 性别 0 男性;1 女性

数据预处理

import warnings
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import pandas_profilingwarnings.filterwarnings('ignore')

查看购买信息,婴儿信息:

bought=pd.read_csv(r'../baby shop/表1购买商品.csv')
baby=pd.read_csv(r'../baby shop/表2婴儿信息.csv')bought.head()
baby.head()bought.info()
print("-"*30)
baby.info()

查看重复值

bought.duplicated('user_id').sum()
baby.duplicated('user_id').sum()
  • bought只有27个用户复购。
  • baby没有两个,都是一个娃。

合并数据然后再拆分

# 合并以便于筛选
df=pd.merge(bought,baby,on='user_id',how='left')
# 拆分为训练数据和测试数据
train=df.drop(df[df['birthday'].isnull()].index)
test=df.drop(df[df['birthday'].notnull()].index)
#重制引索
train.reset_index(drop=True, inplace=True)
test.reset_index(drop=True, inplace=True)

查看训练数据图表

pandas_profiling.ProfileReport(train).to_file(r'../baby shop/example.html')

再合并

df=train.append(test,ignore_index=True)df.drop(df['auction_id'], axis=1, inplace=True)
df.drop(df['birthday'], axis=1, inplace=True)df.info()
df.describe()

异常值处理

# 不是自用的买家
df.drop(df['buy_mount'][df['buy_mount']>6].index,inplace=True)
# 性别数值为2
df.drop(df['gender'][df['gender']==2],inplace=True)

缺失值处理

property商品属性处理:选择订单最多的商品属性进行填充。

df['property'] = df['property'].fillna(df['property'].mode().iloc[0])

gender婴儿性别填充,在特征工程后进行填充。

特征工程

对property商品属性进行以“ ;”字符分列,提取商品各个属性

df['property'] = df['property'].astype('str')
y_property = df['property'].map(lambda x: x.split(';'‘:’))
y_property = y_property.tolist()
# 定义个递归函数
def flatten(items):result = []for item in items:if isinstance(item, (tuple, list)):result.extend(flatten(item))else:result.append(item)return resultX_property=list(set(flatten(y_property)))# 28599个商品属性

将商品属性编码后与数据合并

df = pd.concat([df, df_property], axis=0)

年龄 = 购买日期 - 出生日期

import arrow
df['Age'] =train['day'].map(lambda x: arrow.get(str(x), 'YYYYMMDD'))- train['birthday'].map(lambda x: arrow.get(str(int(x)), 'YYYYMMDD'))df['Age']=df['Age'].dt.days
df['Age']=df['Age'].map(lambda x: format(x/365,'.2f'))
df['Age']=df['Age'].astype('float')
# 父母会在孩子出生前提前购买,负数用0填充
df['Age']=df['Age'].map(lambda x: 0 if x <= 0 else x)
# 删除train中的出生日期,用年龄替换
train.drop(train['birthday'], axis=1, inplace=True)
train['Age']=df['Age']

婴儿的性别对用户购买的行为有一定的影响,查看各个商品属性与性别的相关度,取最高的几个。

Sexpre = df[X_property.extend('gender')]
Sexcov = Sexpre.corr()
Sexcov['Sex'].sort_values()

使用随机森林对其填充

SexKnown = Sexpre[Sexpre['Sex'].notnull()]
SexUnKnown = Sexpre[Sexpre['Sex'].isnull()]SexKnown_X = SexKnown.drop(['Sex'], axis=1)
SexUnKnown_X = SexUnKnown.drop(['Sex'], axis=1)
SexKnown_y = SexKnown['Sex']from sklearn.ensemble import RandomForestRegressorrfr = RandomForestRegressor(random_state=None, n_estimators=500, n_jobs=-1)
rfr.fit(SexKnown_X, SexKnown_y)
rfr.score(SexKnown_X, SexKnown_y)
SexUnKnown_y = rfr.predict(SexUnKnown_X)
df.loc[df['Sex'].isnull(), ['Sex']] = SexUnKnown_y
df.info()#已无缺失值

降维

先编码

# 删除property列
df.drop(df['property'],axis=1,inplace=True)
# 独热编码
df = pd.get_dummies(df)

PCA降维

from sklearn.decomposition import PCA, KernelPCA# 拆分数据
n=len(df['Age'].notnull())X = df[:n]
test_X = df[n:]
X_scaled = RobustScaler().fit(X).transform(X)
y_price = train['birthday']test_X_scaled = RobustScaler().fit(test_X).transform(test_X)pca = PCA(n_components=1000)
X_scaled = pca.fit_transform(X_scaled)
test_X_scaled = pca.transform(test_X_scaled)
X_scaled.shape, test_X_scaled.shape

建模

# 导入机器学习算法库
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier, \ExtraTreesClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, cross_val_score, StratifiedKFold# 设置kfold,交叉采样法拆分数据集
kfold = StratifiedKFold(n_splits=5)# 拆分数据
exercise_X = X_scaled
exercise_y = y_price
test_x = test_X_scaled# 汇总不同模型算法
classifiers = []classifiers.append(SVC())
classifiers.append(DecisionTreeClassifier())
classifiers.append(RandomForestClassifier())
classifiers.append(ExtraTreesClassifier())
classifiers.append(GradientBoostingClassifier())
classifiers.append(KNeighborsClassifier())
classifiers.append(LogisticRegression())
classifiers.append(LinearDiscriminantAnalysis())dfclass = pd.DataFrame(classifiers).astype('str')[0].map(lambda x: x.split('(')[0])
# 打印结果
results = []
for classifier in classifiers:results.append(cross_val_score(classifier,exercise_X,exercise_y, scoring='accuracy', cv=kfold, n_jobs=-1))results_means, results_std = [], []
for result in results:results_means.append(result.mean())results_std.append(result.std())
# 表格查看
resultsDF = pd.DataFrame({'std': results_std,'means': results_means,'sklean': dfclass})

输出结果

result.to_csv('../baby shop/result1.csv', index=False)

[阿里天池]Baby Goods Info Data相关推荐

  1. 阿里天池供应链需求预测比赛小结

    阿里天池供应链需求预测比赛小结 一.赛题的思路回顾 1.1赛题描述 使用历史平均来预测未来的需求 使用测试集真实数据进行过拟合的结果 名词定义 库存水位 在仓库存数量,用来满足需求. 补货时长(交货时 ...

  2. 阿里天池供应链需求预测(二)

    阿里天池供应链需求预测第二阶段总结 一.已尝试的模型和存在的问题: LSTM单变量多步预测模型:通过循环迭代预测,实现了通过前42天的历史需求数据来预测未来14天的库存资源需求量:但是目前由于有的Un ...

  3. 阿里天池—2022江苏气象预测AI算法挑战赛

    文章目录 摘要 一.数据分析 二.MAE简介 三.Transformer简介 四.模型搭建(还未写......) 摘要 This is a meteorological forecasting com ...

  4. 阿里天池新人赛——幸福感挖掘

    本文简要介绍参加阿里天池新人赛--幸福感挖掘的相关思路 整体思路 1.分析问题,提出分析目的 2.数据清洗.数据预处理及数据可视化 3.数据分析 4.建模计算 5.分析结果及竞赛成绩 1.分析问题,提 ...

  5. 阿里天池街景字符编码YOLO5方案

    前言 最近在做OCR相关的任务,用到了阿里天池一个街景字符识别比赛的数据集,索性就分享一下相关方案,我采用YOLO5模型,最终在平台提交分数也做到了0.924,没有经过任何优化,可以看出YOLO5的效 ...

  6. 阿里天池龙珠计划-SQL训练营-Task06

    下载相关创建表格和插入数据脚本 这里为了方便大家,数据脚本已经给大家准备好啦. 点击下方链接直接下载 创建数据表脚本:http://tianchi-media.oss-cn-beijing.aliyu ...

  7. 阿里天池二手车交易价格预测(一)——EDA

    阿里天池二手车交易价格预测(一)--EDA Exploratory Data Analysis是数据科学领取理解和分析数据的方法,通过不断的收集.分析和假设验证,以取得对数据的深入理解. EDA的价值 ...

  8. 阿里天池心跳信号分类预测baseline

    阿里天池又来了一个数据挖掘新人赛,是关于心跳信号分类的预测问题,主要针对初学者学习数据挖掘知识 比赛地址链接 这次数据比较有意思,和最常见的多属性结构化数据不同,本次数据是心电图数据记录,所以用一下传 ...

  9. 阿里天池比赛——地表建筑物识别

    阿里天池比赛--地表建筑物识别 记录一下之前参加的阿里天池比赛,方便以后查看. 策略: 1.多模型训练 2.多模型测试 3.数据增强 4.预训练/冻结训练 5.迁移学习 6.TTA 7.后处理 8.f ...

  10. 阿里天池比赛——食物声音识别

    阿里天池比赛--食物声音识别 最近写毕业论文无聊之余,再次参加阿里天池比赛,之前一直做CV,第一次尝试做语音识别,记录一下过程. 策略: 1.梅尔频谱和梅尔倒谱以及混合 2.多模型测试 想玩这个项目的 ...

最新文章

  1. Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法
  2. DP之最优二叉查找树
  3. modelandview怎么在页面循环_新号段来啦!!!“靓号”怎么选?
  4. c#获取当前时间 毫秒_《Linux设备驱动程序》(十二)——时间操作(一)
  5. React基础学习(第一天)
  6. Android public class MyApplication extends MultiDexApplication使用
  7. webpack编译时No PostCSS Config的解决方法
  8. python开发wince软件_Wince6.0应用开发:二、模拟器的使用
  9. 解读NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎
  10. 解决ng界面长表达式(ui-set)
  11. 华为云ModelArts图深度学习,学习知识还能考取微认证
  12. lisp 天正标高_建筑设计选择 CAD 和天正画图哪个更好?
  13. 【学习笔记】密码学入门(3) 密钥,随机数,PGP软件
  14. Kernel那些事儿之内存管理(6) --- 衣带渐宽终不悔(下)
  15. uC/OS-II任务调度之就绪表及最高优先级任务判定算法
  16. HTML5字体设置重影,Word怎么设置字体重影
  17. Java 基础入门,小白提升路线图
  18. 行式 Excel 文件拆分
  19. 如何检测机器是否支持TPM
  20. 挑灯夜读——Java(一):类与对象

热门文章

  1. Operator ‘==‘ cannot be applied to operands of type ‘byte[]‘ and ‘string‘
  2. postman Could not send request
  3. java库存_java实现超市库存管理系统
  4. if or函数套用_5个IF函数操作,让你轻松掌握条件判断和嵌套运用
  5. CV界的明星人物们和他们的主页地址
  6. JavaScript中的onmouseover事件和onmouseout事件实例
  7. 木头也要懂得讲故事的时代
  8. 人力资源管理系统(大二数据库课设) spring boot,Mybatis+bootstap,ajax项目
  9. 悬赏任务源码系统带app小程序源码基于php开源版
  10. 苹果电池显示维修_iFixit拆解苹果iPhone 12/Pro:显示屏和电池可互换