天猫用户重复购买预测(速通一)

这篇具有很好参考价值的文章主要介绍了天猫用户重复购买预测(速通一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

赛题理解

1、评估指标

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

2、赛题分析

本赛题要求预测新用户在6个月内再次从同一店铺购买商品的概率,是一个连续值,不过因为购买商品只有购买和不购买两种结果,而且评测指标是典型的二分类评测指标AUC,所以这是一个二分类问题

常见的分类模型:

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
对于本赛题,一个初步的思路是其数据量不大,一般用不到深度学习。根据赛题特点,集成算法,尤其是XGBoost, LightGBM, CatBoost 等算法的效果会比较好。

最后为了让模型的效果更好,提升预测精确度,还可以加上模型融合,这是竞赛中常用的技巧。不过在实际工业项目场景中,需要综合考虑模型预测时间、模型效果以及工程环境的时间和并发等方面的要求。

解题思路:
天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

理论知识

参考:工业蒸汽量预测(一)

1.缺失值处理

拿到数据的第一步当然是对数据进行查看,判断其是否存在缺失数据,以及字段缺失数据的占比大概是多少。

我们可以使用Pandas 中count()函数及shape()函数进行统计: count()函 数可以统计不为空
数据的个数: shape()函 数则可以统计数据样本的个数;将shape()函数与count()函数做差就可
以得到数据的缺失个数,再用缺失的个数除以样本的个数来计算样本中此字段的缺失率。

在统计查看完数据的缺失值及缺失率之后,我们需要根据不同情况对相应的缺失数据进行处理,Pandas 包中包含了一些处理缺失值的函数。

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

数据中可能存在隐藏缺失值的情况,这时就要理解数据集内容的含义,比如在某些情况下,0代表缺失值。

对于数据缺失特别严重的数据,我们一般将其删除处理,一方面由于数据缺失过大所蕴含的信息较少;另一方面,缺失率过大的数据可导致用户在建模中产生偏差,而这在后续查找中比较难以追溯,不过这些都需要根据数据和实际的业务场景来定。

针对缺失值较少的情况,一般采用下面几种处理方法,如下表所示:

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

对一些常用的缺失值填充方法进行补充汇总:
天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

2.不均衡样本

在分类任务中,不同类别的训练样例数目常存在差异很大的情况,这时样本不均衡往往会出现模型对样本数较多的类别过拟合、对较少的类别欠拟合的现象,即总是将样本分到样本数较多的分类类别中。

对过多的样本进行欠采样或者对过少的样本进行过采样,常用的采样方法有以下几种:

随机欠采样

例如,数据中有正样本50例,负样本950例,正样本的占比为5%。随机欠采样就是在负样本中随机选出10%,为95例,与正样本组成新的训练集(95+50)。 这样,正样本所占的比例为50/145-35%,比原来的5%有了很大增加。随机欠采样的优点是在平衡数据的同时减小了数据量,加速了训练;缺点是数据减少会影响模型的特征学习能力和泛化能力。

随机过采样

例如,数据中有正样本50例,负样本950例,正样本的占比为5%。随机过采样就是将正样本复制10次,为500例,与负样本组成新的训练集(500+950)。这样,正样本所占的比例为500/1450-35%。随机过采样的优点是相对于欠采样,其没有导致数据信息的损失;缺点是对较少类别的复制增加了过拟合的可能性。

说明:采用上面简单的方法通常可以解决绝大多数样本分布不均衡的问题。

基于聚类的过采样方法

图2-2-1举例说明了这种方法的实现。基于聚类的过采样方法通过聚类作为中介,不但在一定程度 上缓解了类间的样本不平衡问题,同时还缓解了类内的不平衡问题。但是和一般的过采样方法一样,该方法容易使模型对训练数据过拟合。

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
SMOTE算法
SMOTE ( Synthetic Minority Oversampling Technique,合成少数类过采样技术)是基于随
机过采样的一.种改进方法。由于随机复制少数样本来增加样本训练的模型缺少泛化能力,因
此SMOTE算法采用对少数样本进行人工合成的方式将新样本加入训练集中,从而使模型训
练更具有泛化能力,如图2-2-2所示。SMOTE算法的主要步骤如下:

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

其优点是通过人造相似样本取代直接复制的方法减弱了过拟合,也没有丢失有用的信息;缺点是在进行,人工合成样本时,由于没有考虑到近邻样本可能来自不同类别,因此导致增大类别间的重叠。

基于数据清洗的SMOTE

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

3.常见的数据分布

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

数据探索

(导包 – 读取数据 – 数据集样例查看 – 查看数据类型和数据大小 – 查看缺失值 – 观察数据分布 )

探查影响复购的各种因素

1.对店铺分析

用户复购可能受到店铺、用户、用户性别、用户年龄等因素的影响。

(1)分析不同店铺与复购的关系,并可视化显示:

print('选取top5店铺\n店铺\t购买次数')
print(train_data.merchant_id.value_counts().head(5))
#取出top5的商店 进行复购次数统计

#首先复制数据
train_data_merchant = train_data.copy()
#增加一列名为top5,如果是top5标为1,否则标为0
train_data_merchant['TOP5'] = train_data_merchant['merchant_id'].map(lambda x: 1 if x in[4044,3828,4173,1102,4976] else 0)
train_data_merchant
#通过top5这列的标记取出数据
train_data_merchant = train_data_merchant[train_data_merchant['TOP5'] == 1]
#可视化top5
plt.figure(figsize=(8,6))
plt.title('merchant VS label')
ax = sns.countplot('merchant_id',hue = 'label',data = train_data_merchant)

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
可以看出,不同店铺有不同的复购率,可能与店铺售卖的商品及运营有关。

(2)查看店铺的复购分布

merchant_repeat_buy = [rate for rate in train_data.groupby(['merchant_id'])['label'].mean() if rate <= 1 and rate > 0]
plt.figure(figsize = (8,4))

ax = plt.subplot(1,2,1)
sns.distplot(merchant_repeat_buy, fit = stats.norm)
ax = plt.subplot(1,2,2)
res = stats.probplot(merchant_repeat_buy,plot = plt)

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
可以看出,不同店铺有不同的复购概率,为0~0.3。

2.对用户分析

#查看用户复购概率分布
user_repeat_buy = [rate for rate in train_data.groupby(['user_id'])['label'].mean() if rate <= 1 and rate > 0]
plt.figure(figsize = (8,4))

ax = plt.subplot(1,2,1)
sns.distplot(user_repeat_buy, fit = stats.norm)
ax = plt.subplot(1,2,2)
res = stats.probplot(user_repeat_buy,plot = plt)

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
可以看出,近6个月用户的复购概率很小,基本以买一次为主。

3.对用户性别的分析

(1)分析用户性别与复购的关系,并可视化显示。

#查看性别与复购的关系
train_data_user_info = train_data.merge(user_info,on = ['user_id'],how = 'left')
plt.figure(figsize=(8,8))
plt.title('gender VS label')
ax = sns.countplot('gender',hue = 'label',data = train_data_user_info)
for p in ax.patches:
    height = p.get_height()

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
(2)查看用户性别复购的分布。

#可视化
repeat_buy = [rate for rate in train_data_user_info.groupby(['gender'])['label'].mean()]
plt.figure(figsize = (8,4))

ax = plt.subplot(1,2,1)
sns.distplot(repeat_buy, fit = stats.norm)
ax = plt.subplot(1,2,2)
res = stats.probplot(repeat_buy,plot = plt)

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
可以看出,男女的复购概率不同。

4.对用户年龄的分析

(1)分析用户年龄与复购的关系,并可视化显示。

#年龄与复购的关系
plt.figure(figsize = (8,8))
plt.title('age VS label')
ax = sns.countplot('age_range',hue = 'label',data = train_data_user_info)

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测
(2)查看用户年龄复购的分布。

#可视化
repeat_buy = [rate for rate in train_data_user_info.groupby(['age_range'])['label'].mean()]
plt.figure(figsize = (8,4))

ax = plt.subplot(1,2,1)
sns.distplot(repeat_buy, fit = stats.norm)
ax = plt.subplot(1,2,2)
res = stats.probplot(repeat_buy,plot = plt)

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

特征工程

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

1、特征工程介绍

特征归一化

通过梯度下降求解的模型,归一化会对收敛速度产生影响,因此在通常情况下都需要归化。

这些模型包括线性回归、逻辑回归、支持向量机、神经网络等,但对于决策树模型一般不需要进行归一化处理。

类别型特征的转换

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

高维组合特征的处理

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

当引入ID类型的特征时,通常需要降维。

可以发现,当用户uid 有10000 个,商品item 有10000 个时,其组合特征维度为
10000*10000=100000000维,由于这个维度异常高,因此必须通过其他办法把特征维度及拟合的参数维度降下来。我们可以采用SVD ( Sigular Value Decormposition, 奇异值分解)类隐向量方法,其在降低参数的同时,还可以增加参数的迭代拟合数量,有效防止过拟合。

特征组合

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

#特征组合进行业务特征提取
# 点击次数
all_data_test = user_col_cnt(all_data_test,  ['seller_path', 'item_path'], '0', 'user_cnt_0')

# 不同店铺个数
all_data_test = user_col_nunique(all_data_test,  ['seller_path', 'item_path'], '0', 'seller_nunique_0')

文本表示模型

1、词袋模型

天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

2、N-gram模型

N-gram模型是一种语言模型,对于由N个词组成的语句片段,我们假设第N个词的出现与否只与前N-1个词相关,整个语句出现的概率就是这N个词概率的乘积。

3、主题模型

词袋模型和N-gram模型都无法识别两个不同的词或词组是否具有相同的主题,而主题模型可以将具有相同主题的词或词组映射到同一维度上,映射到的这一维度表示某 个主题。

4、词嵌入

词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射到低维空间(K为50~300)上的一个稠密向量。

2、工程思路

特征主要基于基础特征、用户特征、店铺特征、用户+店铺四个方面。
天猫用户重复购买预测(速通一),读书笔记,阿里云,天池大赛,预测,分类,天猫用户重复购买预测

利用Countvector和TF-IDF提取特征

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, ENGLISH_STOP_WORDS                
from scipy import sparse
# cntVec = CountVectorizer(stop_words=ENGLISH_STOP_WORDS, ngram_range=(1, 1), max_features=100)
tfidfVec = TfidfVectorizer(stop_words=ENGLISH_STOP_WORDS, ngram_range=(1, 1), max_features=100)


# columns_list = ['seller_path', 'cat_path', 'brand_path', 'action_type_path', 'item_path', 'time_stamp_path']
columns_list = ['seller_path']
for i, col in enumerate(columns_list):
    all_data_test[col] = all_data_test[col].astype(str)
    tfidfVec.fit(all_data_test[col])
    data_ = tfidfVec.transform(all_data_test[col])
    if i == 0:
        data_cat = data_
    else:
        data_cat = sparse.hstack((data_cat, data_))
#特征重命名 特征合并
df_tfidf = pd.DataFrame(data_cat.toarray())
df_tfidf.columns = ['tfidf_' + str(i) for i in df_tfidf.columns]
all_data_test = pd.concat([all_data_test, df_tfidf],axis=1)

嵌入特征

import gensim

# Train Word2Vec model

model = gensim.models.Word2Vec(
    all_data_test['seller_path'].apply(lambda x: x.split(' ')),
    vector_size=100,   #此处按照书上size报错,可能是由于版本差异,1、可将传入参数格式进行修改:size 改为 vector_size;iter 改为 epochs。2、降低gensim库的版本
    window=5, 
    min_count=5, 
    workers=4)
# model.save("product2vec.model")
# model = gensim.models.Word2Vec.load("product2vec.model")

def mean_w2v_(x, model, size=100):
    try:
        i = 0
        for word in x.split(' '):
            if word in model.wv.vocab:
                i += 1
                if i == 1:
                    vec = np.zeros(size)
                vec += model.wv[word]
        return vec / i 
    except:
        return  np.zeros(size)


def get_mean_w2v(df_data, columns, model, size):
    data_array = []
    for index, row in df_data.iterrows():
        w2v = mean_w2v_(row[columns], model, size)
        data_array.append(w2v)
    return pd.DataFrame(data_array)

df_embeeding = get_mean_w2v(all_data_test, 'seller_path', model, 100)
df_embeeding.columns = ['embeeding_' + str(i) for i in df_embeeding.columns]

# embeeding特征和原始特征合并
all_data_test = pd.concat([all_data_test, df_embeeding],axis=1)

Stacking分类特征

文章来源地址https://www.toymoban.com/news/detail-726328.html

到了这里,关于天猫用户重复购买预测(速通一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 速通——决策树(泰坦尼克号乘客生存预测案例)

    一、决策树 1、概述         树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果 2、建立过程         1. 特征选择:选取有较强分类能力的特征。         2. 决策树生成:根据选择的特征生成决策树。  

    2024年01月21日
    浏览(47)
  • 数据代码分享|R语言基于逐步多元回归模型的天猫商品流行度预测

    本文通过利用回归模型对天猫商品流行度进行了研究,确定了决定天猫商品流行度的重要因素。并讲述、论证了预测天猫商品流行度是天猫商品交易的至关重要的环节。通过对天猫商品流行度预测技术的发展和探讨,深度剖析了天猫商品流行度预测这个研究课题 ( 点击文末

    2024年02月16日
    浏览(46)
  • Datawhale AI夏令营 - 用户新增预测挑战赛 | 学习笔记

      如果将submit.csv提交到讯飞比赛页面,会有多少的分数? 代码中如何对udmp进行了人工的onehot? 1:0.62710 2:对umap列中的字典元素按键取值,初始为一个九维的向量,将字典中键对应的值覆盖到向量中的对应位置。   字段x1至x8为用户相关的属性,为匿名处理字段。添加代码

    2024年02月10日
    浏览(36)
  • 用银行营销数据学习数据挖掘:探索预测客户购买行为的模型

    来源: UCI Machine Learning Repository (UCI Machine Learning Repository) 数据集信息: 这份数据与葡萄牙银行机构的直接营销活动有关。这些营销活动基于电话呼叫。通常需要多次联系同一客户,以确定是否会订阅产品(银行定期存款)。 属性信息: 输入变量: 1-age:年龄(数值型)

    2024年02月08日
    浏览(45)
  • [SQL智慧航行者] - 用户购买商品推荐

    话不多说, 先看数据表信息. employee 表, 包含所有员工信息, 每个员工有其对应的 id, salary 和 departmentid. 话不多说, 再看需求~ 编写一个 sql 查询,找出每个部门工资最高的员工。 话不多说, 进行拆解~ 最后给大家介绍一下我这边的创建数据表和插入数据的操作步骤, 想要自己测试

    2024年02月13日
    浏览(41)
  • 从API到界面:如何将淘宝/天猫商品详情返回值转化为用户友好的展示

    在当今数字化时代,API(应用程序编程接口)已经成为连接不同服务和数据的桥梁。对于电商平台来说,API更是不可或缺的一部分。本文将以淘宝/天猫为例,探讨如何将API返回的商品详情数据转化为用户友好的展示形式。我们将通过代码示例来揭示这一过程。 1. API获取商品

    2024年02月19日
    浏览(39)
  • 「SQL面试题库」 No_65 用户购买平台

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月05日
    浏览(35)
  • 【机器学习】《ChatGPT速通手册》笔记

    以下为一些知识点的简单记录,没有逻辑性,大多以分条形式展示。 由于是粗读,且个人水平有限,所以可能有些地方理解的不够准确,仅供参考。如有问题欢迎指正。 类似产品: 包括:文本分类、语言翻译、情感分析、问答系统、对话生成。 1、OpenAI公司没有单独公布过

    2024年04月22日
    浏览(63)
  • 【电路电子学】7天速通攻略+笔记

    7天是 看视频+记笔记+刷题的总时长,时间紧迫的同学可以看情况进行缩减。个人认为做题,尤其是解析齐全的题最重要! 《电路与电子学基础》唐胜安 所用材料(都可自行找到免费资源) 视频知识点讲解 bilibili-犹如雨下(先看他那个一百多集的系列) bilibili-电气研究员

    2024年02月01日
    浏览(45)
  • Solidity远程购买示例学习笔记

    该示例中买家支付并确认交易后,交易进入锁定状态,待买家确认收货后,交易完成,合约将退回押金给买家和转账交易金额给卖家。其中在不同的交易环节过程中会触发不同的事件发生。 与中心化交易相比,由于失去了类似某宝的中间人角色,需要在交易中添加对买卖双方

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包