#!/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></ul></li><li><span><a href="#1-数据概况分析" data-toc-modified-id="1-数据概况分析-1">1 数据概况分析</a></span><ul class="toc-item"><li><span><a href="#1.1-数据预览" data-toc-modified-id="1.1-数据预览-1.1">1.1 数据预览</a></span><ul class="toc-item"><li><span><a href="#指标解释" data-toc-modified-id="指标解释-1.1.1">指标解释</a></span></li></ul></li><li><span><a href="#1.2-数据清洗" data-toc-modified-id="1.2-数据清洗-1.2">1.2 数据清洗</a></span><ul class="toc-item"><li><span><a href="#1.2.1-类别型变量" data-toc-modified-id="1.2.1-类别型变量-1.2.1">1.2.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-观察样本0、1的平衡性" data-toc-modified-id="2.1-观察样本0、1的平衡性-2.1">2.1 观察样本0、1的平衡性</a></span></li><li><span><a href="#2.2-观察均值大小" data-toc-modified-id="2.2-观察均值大小-2.2">2.2 观察均值大小</a></span><ul class="toc-item"><li><span><a href="#对于数据类型为0和1的变量,观察均值大小可以帮助我们分析这个变量在flag上的分布:" data-toc-modified-id="对于数据类型为0和1的变量,观察均值大小可以帮助我们分析这个变量在flag上的分布:-2.2.1">对于数据类型为0和1的变量,观察均值大小可以帮助我们分析这个变量在flag上的分布:</a></span></li></ul></li><li><span><a href="#2.3-可视化" data-toc-modified-id="2.3-可视化-2.3">2.3 可视化</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><ul class="toc-item"><li><span><a href="#4.1.1-抽取训练集和测试集并进行拟合" data-toc-modified-id="4.1.1-抽取训练集和测试集并进行拟合-4.1.1">4.1.1 抽取训练集和测试集并进行拟合</a></span></li><li><span><a href="#4.1.2-查看模型结果" data-toc-modified-id="4.1.2-查看模型结果-4.1.2">4.1.2 查看模型结果</a></span></li></ul></li><li><span><a href="#4.2-模型评估" data-toc-modified-id="4.2-模型评估-4.2">4.2 模型评估</a></span><ul class="toc-item"><li><span><a href="#4.2.1-评估方法一:计算准确度" data-toc-modified-id="4.2.1-评估方法一:计算准确度-4.2.1">4.2.1 评估方法一:计算准确度</a></span><ul class="toc-item"><li><span><a href="#比较训练集和测试集的准确率,保证内在信息一致性:" data-toc-modified-id="比较训练集和测试集的准确率,保证内在信息一致性:-4.2.1.1">比较训练集和测试集的准确率,保证内在信息一致性:</a></span></li></ul></li><li><span><a href="#4.2.2-评估方法二:ROC和AUC" data-toc-modified-id="4.2.2-评估方法二:ROC和AUC-4.2.2">4.2.2 评估方法二:ROC和AUC</a></span></li></ul></li><li><span><a href="#4.3-模型优化" data-toc-modified-id="4.3-模型优化-4.3">4.3 模型优化</a></span></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></ul></div>
# ## 分析背景
# “天猫”(英文:Tmail,亦称淘宝商城,天猫商城)原名淘宝商城,是一个综合性购物网站,也是马云淘宝网打造的B2C(Business-to-Consumer, 商业零售)品牌。其整合数千家品牌商、生产商,为商家和消费者之间提供一站式解决方案,提供100%品质保证的商品,7天无理由退货的售后服务,以及购物积分返现等优质服务
# ## 分析目标
# 根据用户数据以及消费行为数据
# - 使用Python建立分类模型,进行逻辑回归
# - 预测使用优惠券概率较高的客群
# # 1 数据概况分析
# ## 1.1 数据预览
# ### 指标解释
# - ID 记录编码
#
# - age 年龄
#
# - job 职业
#
# - marital 婚姻状态
#
# - default 花呗是否有违约
#
# - returned 是否有过退货
#
# - loan 是否使用花呗结账
#
# - coupon_used_in_last6_month 过去六个月使用的优惠券数量
#
# - coupon_used_in_last_month 过去一个月使用的优惠券数量
#
# - coupon_ind 该次活动中是否有使用优惠券
# In[1]:
#导入模块和数据
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
get_ipython().run_line_magic('matplotlib', 'inline')
coupon = pd.read_csv('tianmao.csv')
coupon.head()
# In[2]:
#查看数据行列总数
coupon.shape
# In[3]:
#查看数据是否有缺失值
coupon.info()
# 查看完数据整体后,发现无缺失值
# ## 1.2 数据清洗
# ### 1.2.1 类别型变量
# In[4]:
#将类别型变量转换为数字型变量,便于之后分析
#但在本案例中,为了后续分析方便,只处理default, returned, loan这三个变量,保留job, marital
#把default、returned、loan三个变量单独取出来进行哑变量处理get_dummies()。
coupon1 = coupon[['default','returned','loan']]
coupon1 = pd.get_dummies(coupon1)
coupon1.head()
# In[5]:
#把处理后的表格和原表格进行拼接
coupon = pd.concat([coupon, coupon1], axis = 1)
coupon.head()
# In[6]:
#删除包含重复信息和无意义信息的数据
coupon.drop(['ID', 'default', 'default_no', 'returned', 'returned_no', 'loan', 'loan_no'], axis = 1, inplace = True)
#将coupon_ind重新命名为flag,便于之后分析
coupon = coupon.rename(columns = {'coupon_ind' : 'flag'})
coupon.info()
# # 2 单变量分析
# ## 2.1 观察样本0、1的平衡性
# In[7]:
#二分类模型,观察样本(flag)0,1的平衡性
coupon['flag'].value_counts(1)
# - 在二分类问题中,0、1的占比要保持平衡型,实际情况中不低于0.05,否则会影响模型的预测
# - 该数据集0、1占比均高于0.05,因此其分布是合理的
# ## 2.2 观察均值大小
# In[8]:
#先按客户是否使用coupon进行分类聚合
summary = coupon.groupby(['flag'])
#求出各种情况均值的占比情况
summary.mean()
# ### 对于数据类型为0和1的变量,观察均值大小可以帮助我们分析这个变量在flag上的分布:
# - coupon_used_in_last_month在0的均值为0.26,在1的均值为0.53,说明越是在上个月使用了coupon的客户,接下来再使用coupon的概率会越高
# - default_yes和loan_yes在0时的均值均大于在1时的均值,说明花呗违约和用花呗结账的客户在接下来的时间里使用coupon的概率较小
# - age在0和1的均值分别为40.8和41.8,差别不大,说明年龄无太大的区分关系
# ## 2.3 可视化
# In[9]:
#观察returned_yes在flag上的分布
sns.countplot(y = 'returned_yes', hue = 'flag', data = coupon)
# - 相比起没有退货的客户,退货的客户使用coupon的概率较小
# In[10]:
#观察marital在flag上的分布
s