关闭

机器学习项目实战之用户流失预警

标签: 机器学习
1198人阅读 评论(0) 收藏 举报
分类:
from __future__ import division
import pandas as pd
import numpy as np

churn_df = pd.read_csv("D:\\test\\machineLearning\\churn.csv")
col_names = churn_df.columns.tolist()

print "Column_names:"
print col_names

to_show = col_names[:6]+col_names[-6:]
print "\nSample_data:"
churn_df[to_show].head(3)
Column_names: [‘State’, ‘Account Length’, ‘Area Code’, ‘Phone’, “Int’l Plan”, ‘VMail Plan’, ‘VMail Message’, ‘Day Mins’, ‘Day Calls’, ‘Day Charge’, ‘Eve Mins’, ‘Eve Calls’, ‘Eve Charge’, ‘Night Mins’, ‘Night Calls’, ‘Night Charge’, ‘Intl Mins’, ‘Intl Calls’, ‘Intl Charge’, ‘CustServ Calls’, ‘Churn?’] Sample_data:
State Account Length Area Code Phone Int’l Plan VMail Plan Night Charge Intl Mins Intl Calls Intl Charge CustServ Calls Churn?
0 KS 128 415 382-4657 no yes 11.01 10.0 3 2.70 1 False.
1 OH 107 415 371-7191 no yes 11.45 13.7 3 3.70 1 False.
2 NJ 137 415 358-1921 no no 7.32 12.2 5 3.29 0 False.
#将字符改变成数值,便于分析
#Churn是客户量流失的意思
churn_result = churn_df["Churn?"]
y = np.where(churn_result == 'True.',1,0)

#去掉一些特征
to_drop = ['State','Area Code','Phone','Churn?']
churn_feat_space = churn_df.drop(to_drop,axis=1)

#将这些yes和no转化为布尔值
yes_no_cols = ["Int'l Plan","VMail Plan"]
churn_feat_space[yes_no_cols] = churn_feat_space[yes_no_cols] == 'yes'

feaures = churn_feat_space.columns

X = churn_feat_space.as_matrix().astype(np.float)

#重点:不同的特征项有不同的值,如1-2,3万到4万,不同特征间的数值上的巨大差异会影响我们的分析
#例如作图的时候,所以我们需要统一将这些数据压缩到一定的区间上
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)

print "Feature space holds %d observations and %d features"% X.shape
print "Unique target labels:",np.unique(y)
print X[0]
print len(y[y == 0])
Feature space holds 3333 observations and 17 features Unique target labels: [0 1] [ 0.67648946 -0.32758048 1.6170861 1.23488274 1.56676695 0.47664315 1.56703625 -0.07060962 -0.05594035 -0.07042665 0.86674322 -0.46549436 0.86602851 -0.08500823 -0.60119509 -0.0856905 -0.42793202] 2850
from sklearn.cross_validation import KFold

#交叉验证函数:X是特征数据,y是label,clf_class是你选择的分类器,kwargs指定的参数
def run_cv(X,y,clf_class,**kwargs):
    # Construct a kfolds object
    kf = KFold(len(y),n_folds=5,shuffle=True)
    y_pred = y.copy()

    # Iterate through folds
    for train_index, test_index in kf:
        X_train, X_test = X[train_index], X[test_index]
        y_train = y[train_index]
        # Initialize a classifier with key word arguments
        clf = clf_class(**kwargs)
        clf.fit(X_train,y_train)
        y_pred[test_index] = clf.predict(X_test)
    return y_pred
from sklearn.svm import SVC  #支持向量机
from sklearn.ensemble import RandomForestClassifier as RF  #随机森林
from sklearn.neighbors import KNeighborsClassifier as KNN  #k最近邻

def accuracy(y_true,y_pred):
    # NumPy interprets True and False as 1. and 0.
    return np.mean(y_true == y_pred)

#尝试使用多种分类器来验证效果
print "Support vector machines:"
print "%.3f" % accuracy(y, run_cv(X,y,SVC))
print "Random forest:"
print "%.3f" % accuracy(y, run_cv(X,y,RF))
print "K-nearest-neighbors:"
print "%.3f" % accuracy(y, run_cv(X,y,KNN))
Support vector machines: 0.913 Random forest: 0.942 K-nearest-neighbors: 0.897
#以上的准确率的意义并不大,对于客户来说,重要的是ROC指标FN,即我预测错了,认为客户不会流失,但是客户流失了

from sklearn.cross_validation import KFold

#交叉验证函数:X是特征数据,y是label,clf_class是你选择的分类器,kwargs指定的参数
def run_prob_cv(X,y,clf_class,**kwargs):
    # Construct a kfolds object
    kf = KFold(len(y),n_folds=5,shuffle=True)
    y_prob = np.zeros((len(y),2))

    # Iterate through folds
    for train_index, test_index in kf:
        X_train, X_test = X[train_index], X[test_index]
        y_train = y[train_index]
        # Initialize a classifier with key word arguments
        clf = clf_class(**kwargs)
        clf.fit(X_train,y_train)
        y_prob[test_index] = clf.predict_proba(X_test)
    return y_prob
import warnings
warnings.filterwarnings('ignore')

pred_prob = run_prob_cv(X,y,RF,n_estimators=10)

pred_churn = pred_prob[:,1]
is_churn = y == 1

counts = pd.value_counts(pred_churn)

true_prob = {}
for prob in counts.index:
    true_prob[prob] = np.mean(is_churn[pred_churn == prob])
    true_prob = pd.Series(true_prob)

counts = pd.concat([counts,true_prob],axis=1).reset_index()
counts.columns = ["pred_prob","count","true_prob"]
counts
#通过观测以下数据进行预警,当实际的可能性是百分之30或者40时,对应的真实的用户流失情况,由用户选择阈值进行预警
pred_prob count true_prob
0 0.0 1779 0.029230
1 0.1 696 0.020115
2 0.2 265 0.060377
3 0.3 126 0.142857
4 0.8 91 0.978022
5 0.9 75 0.960000
6 0.4 73 0.438356
7 0.7 65 0.953846
8 0.5 57 0.561404
9 1.0 56 0.982143
10 0.6 50 0.820000
0
0
查看评论

学习Python和机器学习的几个不错网址

为了理解和应用机器学习技术,你需要学习 Python 或者 R。这两者都是与 C、Java、PHP 相类似的编程语言。但是,因为 Python 与 R 都比较年轻,而且更加“远离”CPU,所以它们显得简单一些。...
  • laowu8615
  • laowu8615
  • 2017-03-15 08:20
  • 1616

[机器学习实战]使用 scikit-learn 预测用户流失

客户流失“流失率”是描述客户离开或停止支付产品或服务费率的业务术语。这在许多企业中是一个关键的数字,因为通常情况下,获取新客户的成本比保留现有成本(在某些情况下,贵5到20倍)。因此,了解保持客户参与度是非常宝贵的,因为它是开发保留策略和推出旨在阻止客户走出门的运营实践的合理基础。因此,公司越来越感...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2017-03-14 22:19
  • 3987

机器学习项目实战之用户流失预警

from __future__ import division import pandas as pd import numpy as npchurn_df = pd.read_csv("D:\\test\\machineLearning\\churn.csv") col_nam...
  • qiujiahao123
  • qiujiahao123
  • 2017-03-22 22:44
  • 1198

基于电信集团某省公司千万用户流失预警项目LR算法的实现

随着三大运营商和民营企业的迅猛发展,移动市场竞争激烈,市场日趋饱和,各通信运营商的发展重心由发展新用户过渡到维系保有老用户,为了更好支撑老用户维系工作,用户流失预警作为其中一项重要环节被尤其重视,本案例是基于电信集团某省公司几千万用户数据展开。 本案例只展示核心步骤及相关代码,使用工...
  • yawei_liu1688
  • yawei_liu1688
  • 2017-12-06 18:02
  • 161

基于机器学习的客流失预警分析

本次内容由于了写在了印象笔记中,图片过多,所以可以点击一下链接进行查看,打不开可以q2271207177 基于机器学习的客流失预警分析
  • CEOko1007
  • CEOko1007
  • 2017-11-28 17:17
  • 114

数据挖掘案例:建立客户流失模型

随着市场竞争的加剧,中国电信面临的压力越来越大,客户流失也日益增大。从统计数据看,今年固话小灵通的销户数已经超过了开户数。面对如此严峻的市场形式,当务之急就是要尽全力减少客户的流失。因此,利用数据挖掘方法,建立一套可以及时预测客户流失率的模型就相当有必要。    ...
  • bluejason
  • bluejason
  • 2014-10-20 20:32
  • 3229

金融风控-->客户流失预警模型-->特征工程

上一篇博文中,我们对金融数据(连续性变量,类别性变量)进行了可视化操作,以及单因子分析,多因子分析等初始预处理。得出了变量和目标变量的相关性。本篇博文中将对金融数据进行全面详细的数据预处理以及特征工程。这里包括以下几点: 极端值的处理 缺失值的处理 特殊变量的处理 构造流失行为的特征 极端值的处理极...
  • Mr_tyting
  • Mr_tyting
  • 2017-07-10 15:28
  • 1390

不会机器学习,你照样可以预测用户流失

———— / BEGIN / ———— 什么是用户流失率? 我们为什么需要关注用户流失率? 简单来说: 用户流失率是指用户的流失数量与全部使用/消费产品(或服务)用户的数量的比例,是用户流失的定量表述,以及判断用户流失的主要指标;直接反映了产品的市场接受程度如...
  • k7Jz78GeJJ
  • k7Jz78GeJJ
  • 2017-11-03 00:00
  • 162

LogisticRegression用户流失预测模型初探【推荐】

什么是逻辑回归? Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。 这一家族中的模型形式基本上都差不多,不同的就是因变量不同...
  • java1573
  • java1573
  • 2017-12-18 10:40
  • 146

金融风控-->客户流失预警模型-->金融数据分析

从这篇博文开始,我将介绍机器学习,深度学习在金融风控这个行业上的应用。其实机器学习,深度学习在一些相关场景上的应用,其解决方法都是大同小异,差不多都是固定的解决套路,但是需要结合这个场景这个行业领域的相关知识来解决。这篇博文将开始介绍客户流失预警模型,而本篇博文将主要侧重介绍金融数据分析,预处理。客...
  • Mr_tyting
  • Mr_tyting
  • 2017-07-09 09:53
  • 1847
    个人资料
    • 访问:28453次
    • 积分:854
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:2篇
    • 译文:0篇
    • 评论:7条
    文章存档
    最新评论