#!/usr/bin/env python
# coding: utf-8
# <h1>Table of Contents<span class="tocSkip"></span></h1>
# <div class="toc"><ul class="toc-item"><li><ul class="toc-item"><li><span><a href="#分析背景" data-toc-modified-id="分析背景-0.1">分析背景</a></span></li><li><span><a href="#分析目标" data-toc-modified-id="分析目标-0.2">分析目标</a></span></li><li><span><a href="#分析流程" data-toc-modified-id="分析流程-0.3">分析流程</a></span></li></ul></li><li><span><a href="#1-数据概况分析" data-toc-modified-id="1-数据概况分析-1">1 数据概况分析</a></span><ul class="toc-item"><li><ul class="toc-item"><li><span><a href="#指标解释" data-toc-modified-id="指标解释-1.0.1">指标解释</a></span></li></ul></li></ul></li><li><span><a href="#2-单变量分析" data-toc-modified-id="2-单变量分析-2">2 单变量分析</a></span><ul class="toc-item"><li><span><a href="#2.1-数字型变量" data-toc-modified-id="2.1-数字型变量-2.1">2.1 数字型变量</a></span></li><li><span><a href="#2.2-类别型变量" data-toc-modified-id="2.2-类别型变量-2.2">2.2 类别型变量</a></span></li></ul></li><li><span><a href="#3-相关可视化" data-toc-modified-id="3-相关可视化-3">3 相关可视化</a></span></li><li><span><a href="#4-回归模型" data-toc-modified-id="4-回归模型-4">4 回归模型</a></span><ul class="toc-item"><li><span><a href="#4.1-建立模型" data-toc-modified-id="4.1-建立模型-4.1">4.1 建立模型</a></span></li><li><span><a href="#4.2-模型评估" data-toc-modified-id="4.2-模型评估-4.2">4.2 模型评估</a></span></li><li><span><a href="#4.2-模型迭代优化" data-toc-modified-id="4.2-模型迭代优化-4.3">4.2 模型迭代优化</a></span><ul class="toc-item"><li><ul class="toc-item"><li><span><a href="#销售额模型预计分析:" data-toc-modified-id="销售额模型预计分析:-4.3.0.1">销售额模型预计分析:</a></span></li></ul></li></ul></li></ul></li><li><span><a href="#5-业务建议" data-toc-modified-id="5-业务建议-5">5 业务建议</a></span><ul class="toc-item"><li><span><a href="#5.1-用户分析" data-toc-modified-id="5.1-用户分析-5.1">5.1 用户分析</a></span></li><li><span><a href="#5.2-提高销售额变量分析---高价值用户" data-toc-modified-id="5.2-提高销售额变量分析---高价值用户-5.2">5.2 提高销售额变量分析 - 高价值用户</a></span></li><li><span><a href="#5.3-结论" data-toc-modified-id="5.3-结论-5.3">5.3 结论</a></span></li></ul></li><li><span><a href="#6-模型解读" data-toc-modified-id="6-模型解读-6">6 模型解读</a></span><ul class="toc-item"><li><ul class="toc-item"><li><span><a href="#6.1-系数解读" data-toc-modified-id="6.1-系数解读-6.0.1">6.1 系数解读</a></span><ul class="toc-item"><li><span><a href="#销售额模型预计分析:" data-toc-modified-id="销售额模型预计分析:-6.0.1.1">销售额模型预计分析:</a></span></li></ul></li><li><span><a href="#6.2-业务解读" data-toc-modified-id="6.2-业务解读-6.0.2">6.2 业务解读</a></span></li></ul></li></ul></li></ul></div>
# ## 分析背景
# 说到小红书,是目前非常热门的电商平台,和其他电商平台不同,小红书是从社区起家。在小红书社区,用户通过文字、图片、视频笔记的分享,记录了这个时代年轻人的正能量和美好生活。
#
# 小红书通过机器学习对海量信息和人进行精准、高效匹配,已累积海量的海外购物数据,分析出最受欢迎的商品及全球购物趋势,并在此基础上把全世界的好东西,以最短的路径、最简洁的方式提供给用户。
#
# 本项目协助小红书分析不同的业务决策所带来的销售额变化。
# ## 分析目标
# 根据用户数据以及消费行为数据
#
# - 使用Python建立线性回归模型
# - 预测用户的消费金额变化
# - 找到对用户消费影响较大的因素
#
# ## 分析流程
# # 1 数据概况分析
# ### 指标解释
# - revenue:用户的下单购买金额
# - 3rd_party_stores:用户过往在app中从第三方商家购买的数量,0表示购买的自营产品
# - gender:男1,女0,空缺unkown
# - age:年龄,空缺unkown
# - engaged_last_30:最近30天在app上有参与重点活动
# - lifecycle:生命周期A:注册6个月内; B:一年内; C:两年内
# - days_since_last_order:最近一次下单距今的天数(小于1表示当天有下单)
# - previous_order_amount:累计的用户购买金额
# statsmodels包下载网站 https://pypi.org/project/statsmodels/#files 下载对应系统python版本安装包,项目目录有下载好的文件。
#
# 安装参考指令:
#
# pip install statsmodels-0.12.2-cp37-none-win_amd64.whl
# In[6]:
# 本人的python是3.9版本,所以运行下面指令安装
#get_ipython().system('pip install statsmodels-0.13.5-cp39-cp39-win_amd64.whl')
# In[40]:
#导入模块
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.linear_model import LinearRegression
from statsmodels.formula.api import ols
get_ipython().run_line_magic('matplotlib', 'inline')
#导入数据
red = pd.read_csv('redNew.csv')
red.head()
# In[41]:
#查看数据信息
red.info()
# 结果显示共有29452行数据,其中gender, age, engaged_last_30三列有缺失值,需要对其进行数据处理
# In[42]:
#查看缺失值占总数的比值
red.isnull().sum()/red.count()
# 缺失值占比约为70%,不能直接删除缺失值,否则会损失非常多的数据
# In[43]:
#了解数据分布
red.describe()
# In[44]:
#对于连续变量,可以用均值、中位数或者根据其他数据模型填充;
#对于类别变量,则可以把变量拆解为哑变量,再删除重复或没有意义的变量
#gender是类别型变量,先把缺失值填充为unknown
#即将gender拆解为gender_0, gender_1, gender_unknown, 每个变量用0/1表示
red['gender'] = red['gender'].fillna('unknown')
# In[45]:
#engaged_last_30是类别型变量,也把缺失值填充为unknown
red['engaged_last_30'] = red['engaged_last_30'].fillna('unknown')
# In[46]:
#类别型变量填充完毕后,剩下的连续型变量均可用均值填充和进行哑变量处理
#age是连续变量,用均值填充
red = red.fillna(red.mean(numeric_only=True))
red.info()
# In[ ]:
# In[ ]:
# # 2 单变量分析
# ## 2.1 数字型变量
# In[47]:
#用户下单金额revenue
sns.distplot(red['revenue'])
# 集中分布在0-200之间
# In[48]:
#用户以往累积购买金额previous_order_amount
sns.distplot(red['previous_order_amount'])
# 用户以往累积金额为0-100的频数较高
# In[49]:
#年龄age
sns.distplot(red['age'])
# In[50]:
#年龄age的数据分布
red['age'].describe()
# - 用户年龄分布在18 - 99岁之间,用户年龄平均值为60.39岁,用户年龄中位数为60.39岁,绝大部分用户年龄集中在58 = 63岁之间
# - 用户年龄在平均值两侧呈对称分布
# - 29452个用户的年龄为60.3岁,60岁或是小红书的默认年龄选项
# In[51]:
#把 days_since_last_order 前面的空格删掉
red.rename(columns = {' days_since_last_order ':'days_since_last_order'}, inplace = True)
# red.info()
#用户最近一次下单距今的天数days_since_last_order
sns.distplot(red['days_since_last_order'])
# In[52]:
red['days_since_last_order'].describe()
# - 用户最近一次下单距今的天数分布在0 - 23天之间,可见所有的用户在本月内都有下单行为
# - 用户最近一次下单后平均7.7天后会再次下单
# - 用户最近一次下单距今0 - 1天的频数较高
# ## 2.2 类别型变量
# In[53]:
red
# In[54]:
#生命周期lifecycle
#不同生命周期(lifecycle)对应的revenue(销售额)是怎样的
#生命周期,分类为A,B,C(分别对应注册后6个月内,1年内,2年内)
red.groupby(red['lifecycle'])['revenue'].descr