精华内容
下载资源
问答
  • 做客户流失预测
    2022-06-21 00:30:40

     Datawhale干货 

    作者:鱼佬,武汉大学硕士

    2022科大讯飞:电信客户流失预测挑战赛

    赛事地址(持续更新):

    https://challenge.xfyun.cn/topic/info?type=telecom-customer&ch=ds22-dw-zs01

    赛题介绍

    随着市场饱和度的上升,电信运营商的竞争也越来越激烈,电信运营商亟待解决减少用户流失,延长用户生命周期的问题。对于客户流失率而言,每增加5%,利润就可能随之降低25%-85%。因此,如何减少电信用户流失的分析与预测至关重要。

    鉴于此,运营商会经常设有客户服务部门,该部门的职能主要是做好客户流失分析,赢回高概率流失的客户,降低客户流失率。某电信机构的客户存在大量流失情况,导致该机构的用户量急速下降。面对如此头疼的问题,该机构将部分客户数据开放,诚邀大家帮助他们建立流失预测模型来预测可能流失的客户。

    赛题任务

    给定某电信机构实际业务中的相关客户信息,包含69个与客户相关的字段,其中“是否流失”字段表明客户会否会在观察日期后的两个月内流失。任务目标是通过训练集训练模型,来预测客户是否会流失,以此为依据开展工作,提高用户留存。

    赛题数据

    赛题数据由训练集和测试集组成,总数据量超过25w,包含69个特征字段。为了保证比赛的公平性,将会从中抽取15万条作为训练集,3万条作为测试集,同时会对部分字段信息进行脱敏。

    特征字段

    客户ID、地理区域、是否双频、是否翻新机、当前手机价格、手机网络功能、婚姻状况、家庭成人人数、信息库匹配、预计收入、信用卡指示器、当前设备使用天数、在职总月数、家庭中唯一订阅者的数量、家庭活跃用户数、....... 、过去六个月的平均每月使用分钟数、过去六个月的平均每月通话次数、过去六个月的平均月费用、是否流失

    评分标准

    赛题使用AUC作为评估指标,即:

    from sklearn import metrics
    
    auc = metrics.roc_auc_score(data['default_score_true'], data['default_score_pred'])

    赛题baseline

    导入模块

    import pandas as pd
    import os
    import gc
    import lightgbm as lgb
    import xgboost as xgb
    from catboost import CatBoostRegressor
    from sklearn.linear_model import SGDRegressor, LinearRegression, Ridge
    from sklearn.preprocessing import MinMaxScaler
    from gensim.models import Word2Vec
    import math
    import numpy as np
    from tqdm import tqdm
    from sklearn.model_selection import StratifiedKFold, KFold
    from sklearn.metrics import accuracy_score, f1_score, roc_auc_score, log_loss
    import matplotlib.pyplot as plt
    import time
    import warnings
    warnings.filterwarnings('ignore')

    数据预处理

    train = pd.read_csv('train.csv')
    test = pd.read_csv('test.csv')
    data = pd.concat([train, test], axis=0, ignore_index=True)

    训练数据/测试数据准备

    features = [f for f in data.columns if f not in ['是否流失','客户ID']]
    
    train = data[data['是否流失'].notnull()].reset_index(drop=True)
    test = data[data['是否流失'].isnull()].reset_index(drop=True)
    
    x_train = train[features]
    x_test = test[features]
    
    y_train = train['是否流失']

    构建模型

    def cv_model(clf, train_x, train_y, test_x, clf_name):
        folds = 5
        seed = 2022
        kf = KFold(n_splits=folds, shuffle=True, random_state=seed)
    
        train = np.zeros(train_x.shape[0])
        test = np.zeros(test_x.shape[0])
    
        cv_scores = []
    
        for i, (train_index, valid_index) in enumerate(kf.split(train_x, train_y)):
            print('************************************ {} ************************************'.format(str(i+1)))
            trn_x, trn_y, val_x, val_y = train_x.iloc[train_index], train_y[train_index], train_x.iloc[valid_index], train_y[valid_index]
    
            if clf_name == "lgb":
                train_matrix = clf.Dataset(trn_x, label=trn_y)
                valid_matrix = clf.Dataset(val_x, label=val_y)
    
                params = {
                    'boosting_type': 'gbdt',
                    'objective': 'binary',
                    'metric': 'auc',
                    'min_child_weight': 5,
                    'num_leaves': 2 ** 5,
                    'lambda_l2': 10,
                    'feature_fraction': 0.7,
                    'bagging_fraction': 0.7,
                    'bagging_freq': 10,
                    'learning_rate': 0.2,
                    'seed': 2022,
                    'n_jobs':-1
                }
    
                model = clf.train(params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix], 
                                  categorical_feature=[], verbose_eval=3000, early_stopping_rounds=200)
                val_pred = model.predict(val_x, num_iteration=model.best_iteration)
                test_pred = model.predict(test_x, num_iteration=model.best_iteration)
                
                print(list(sorted(zip(features, model.feature_importance("gain")), key=lambda x: x[1], reverse=True))[:20])
                    
            if clf_name == "xgb":
                train_matrix = clf.DMatrix(trn_x , label=trn_y)
                valid_matrix = clf.DMatrix(val_x , label=val_y)
                test_matrix = clf.DMatrix(test_x)
                
                params = {'booster': 'gbtree',
                          'objective': 'binary:logistic',
                          'eval_metric': 'auc',
                          'gamma': 1,
                          'min_child_weight': 1.5,
                          'max_depth': 5,
                          'lambda': 10,
                          'subsample': 0.7,
                          'colsample_bytree': 0.7,
                          'colsample_bylevel': 0.7,
                          'eta': 0.2,
                          'tree_method': 'exact',
                          'seed': 2020,
                          'nthread': 36,
                          "silent": True,
                          }
                
                watchlist = [(train_matrix, 'train'),(valid_matrix, 'eval')]
                
                model = clf.train(params, train_matrix, num_boost_round=50000, evals=watchlist, verbose_eval=3000, early_stopping_rounds=200)
                val_pred  = model.predict(valid_matrix, ntree_limit=model.best_ntree_limit)
                test_pred = model.predict(test_matrix , ntree_limit=model.best_ntree_limit)
                     
            if clf_name == "cat":
                params = {'learning_rate': 0.2, 'depth': 5, 'l2_leaf_reg': 10, 'bootstrap_type': 'Bernoulli',
                          'od_type': 'Iter', 'od_wait': 50, 'random_seed': 11, 'allow_writing_files': False}
                
                model = clf(iterations=20000, **params)
                model.fit(trn_x, trn_y, eval_set=(val_x, val_y),
                          cat_features=[], use_best_model=True, verbose=3000)
                
                val_pred  = model.predict(val_x)
                test_pred = model.predict(test_x)
                
            train[valid_index] = val_pred
            test = test_pred / kf.n_splits
            cv_scores.append(roc_auc_score(val_y, val_pred))
            
            print(cv_scores)
           
        print("%s_scotrainre_list:" % clf_name, cv_scores)
        print("%s_score_mean:" % clf_name, np.mean(cv_scores))
        print("%s_score_std:" % clf_name, np.std(cv_scores))
        return train, test
        
    def lgb_model(x_train, y_train, x_test):
        lgb_train, lgb_test = cv_model(lgb, x_train, y_train, x_test, "lgb")
        return lgb_train, lgb_test
    
    def xgb_model(x_train, y_train, x_test):
        xgb_train, xgb_test = cv_model(xgb, x_train, y_train, x_test, "xgb")
        return xgb_train, xgb_test
    
    def cat_model(x_train, y_train, x_test):
        cat_train, cat_test = cv_model(CatBoostRegressor, x_train, y_train, x_test, "cat") 
        return cat_train, cat_test
        
    lgb_train, lgb_test = lgb_model(x_train, y_train, x_test)

    提交结果

    test['是否流失'] = lgb_test
    test[['客户ID','是否流失']].to_csv('test_sub.csv', index=False)

    数据挖掘赛事交流群

    5eb753b7feff47ccdf43924d200be76b.png

    如果群满,关注Datawhale公众号,回复“数据挖掘”或“CV”或“NLP”可邀请加入各自战队群,除了经验交流,赛题也会在群内更新发布。

    一键三连,一起学习⬇️ 

    更多相关内容
  • 用Python建立客户流失预测模型
  • 对于公司来说,要想实现持续发展,准确预测客户流失至关重要。 先前的研究已经使用许多机器学习方法来预测客户流失。 通用模型无法充分利用时间序列功能。 为了克服这个缺点,我们提出了一个基于LSTM和CNN的模型,该...
  • 如何利用BI工具银行零售客户流失预测.docx如何利用BI工具银行零售客户流失预测.docx如何利用BI工具银行零售客户流失预测.docx如何利用BI工具银行零售客户流失预测.docx如何利用BI工具银行零售客户流失预测...
  • 特征字段:客户ID、地理区域、是否双频、是否翻新机、当前手机价格、手机网络功能、婚姻状况、家庭成人人数、信息库匹配、预计收入、信用卡指示器、当前设备使用天数、在职总月数、家庭中唯一订阅者的数量、家庭活跃...
  • 基于支持向量机的客户流失预测模型研究,夏国恩,金炜东,本文将支持向量机(Support Vector Machine,SVM) 应用于客户流失预测研究中,通过实证研究,证实了该方法用于电信企业客户流失预测比BP神经
  • 针对电信领域客户流失的问题,提出了改进聚类的客户流失预测模型。根据通信行业中实际客户流失数据的正负样本数量不平衡而且数据量特别大的特点,提出带有不同权重参数的改进聚类算法,并将其用于电信行业的客户流失...
  • Python应用实战代码-Python 银行信用卡客户流失预测(kaggle)
  • 客户损失客户流失预测给定用户最近30天的登录时间,请预测下个月是否将进行一次登录。 使用了numpy和sklearn。
  • Python机器学习编程与实战教学教案08通信运营商客户流失分析与预测.pdfPython机器学习编程与实战教学教案08通信运营商客户流失分析与预测.pdfPython机器学习编程与实战教学教案08通信运营商客户流失分析与预测.pdf...
  • 基于数据挖掘的客户流失预测研究.pdf
  • 如何利用BI工具银行零售客户流失预测.pdf如何利用BI工具银行零售客户流失预测.pdf如何利用BI工具银行零售客户流失预测.pdf如何利用BI工具银行零售客户流失预测.pdf如何利用BI工具银行零售客户流失预测.pdf...
  • 目前客户流失预测任务中常用的模型集成方法采用传统机器学习模型作为基学习器。而传统机器学习模型相比于深度学习模型,存在无法对时序数据进行有效建模、特征工程对模型效果影响较大等缺点。针对这些问题,提出基于...
  • 流失预测使用人工神经网络的客户流失预测问题陈述任务是预测某个客户是否会放弃公司。 也就是说,要预测“客户流失”属性。 通常,为每个客户国家/地区提供的信息帐户长度区号电话国际计划VMail计划VMail消息日间...
  • 结合过滤式和封装式特征选择方法的优点及组合分类器的较高预测能力,提出了一种基于Fisher比率与预测风险准则的分步特征选择方法结合组合分类器的电信客户流失预测模型。首先,基于Fisher比率从原始特征集合中提取...
  • 数据挖掘技术下的银行客户流失决策树预测算法.pdf
  • 客户流失预测:用于预测电信公司客户流失的机器学习实现
  • 数据挖掘视角下的电信客户流失预测研究.pdf
  • 数据分析精华案例-客户流失预测模型
  • 根据客户流失预测研究的发展历程和智能化程度的高低,将客户流失预测研究划分为三个阶段,包括基于传统统计学的预测方法、基于人工智能的预测方法和基于统计学习理论的预测方法,并通过分析每个阶段存在的问题提出了...
  • 基于深度学习的电信客户流失预测方法研究.pdf
  • 准确的客户流失预测能够使移动业务针对特定用户需求和消费水平进行差异化服务。本文提出了一种基于贝叶斯网络的客户流失预测模型,根据案例分析的结果识别客户离网倾向原因,寻找具有高离网倾向的客户群,通过分类的...
  • 使用的数据集来自开源的kaggle电信客户流失数据: ://www.kaggle.com/blastchar/telco-customer-churn 分类模型评估指标:精度,召回率,F1得分等。 分类中的错误类型:类型1错误:无法拒绝原假设。 误报。类型2...
  • 针对数据挖掘方法在电信客户流失预测中的局限性,提出将信息融合与数据挖掘相结合,分别从数据层、特征层、决策层构建客户流失预测模型。确定客户流失预测指标;根据客户样本在特征空间分布的差异性对客户进行划分,...
  • 目前客户流失预测面临的主要问题之一就是类不平衡性(class imbalance)。针对这个问题,首先应用欠抽样法(undersampling)处理客户流失数据降低不平衡性,再应用C4.5D、C4.5N、RIPPER、NaiveBayes和RandomForest机器...
  • 针对现有客户流失预测模型预测准确率低下的问题,本文结合基于统计学习的客户聚类分析和分类预测技术来构建客户流失预测模型。根据模型计算结果,可以辨别出客户类别及流失倾向,并在此基础上提出了预防客户流失的保持...
  • 客户流失预测

    2021-02-25 15:05:43
    客户是企业的重要资源,也是企业的无形资产,客户的流失,也就意味着资产的流失,因此进行流失分析是十分重要的,进行客户流失分析的目的,就是阻止或者避免客户的流失,提高企业的盈利水平和竞争力 1.2目的 深入...

    一.概述
    1.1项目背景

    客户是企业的重要资源,也是企业的无形资产,客户的流失,也就意味着资产的流失,因此进行流失分析是十分重要的,进行客户流失分析的目的,就是阻止或者避免客户的流失,提高企业的盈利水平和竞争力
    1.2目的
    深入了解用户画像及行为偏好,挖掘出影响用户流失的关键因素,并通过算法预测客户访问的转化结果,从而更好地完善产品设计,提升用户体验
    二.读取数据
    在这里插入图片描述
    在这里插入图片描述
    三.特征工程
    3.1相关性分析
    在这里插入图片描述
    在这里插入图片描述
    四.建模与模型评估
    4.1模型比较
    在这里插入图片描述
    4.2重要特征
    在这里插入图片描述
    五.RFM模型和用户画像
    5.1用户画像

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5.2用户画像分析
    5.2.1高价值用户分析

    这部分客户对我们而言是非常重要的,因此我们需要对其实施个性化的营销:
    ①为客户提供更多差旅酒店信息
    ②多推荐口碑好,性价比高的商务酒店连锁酒店房源吸引用户
    ③在非工作日的11点,17点等日间流量小高峰时段进行消息推送
    5.2.2中等群体分析
    针对这部分客户,我们需要:
    ①在节假日前两三星期定期推送国外高星级酒店,尽可能多地进行推送,因为此类客户通常比较喜欢浏览
    ②推送高端酒店以及当地的旅行资讯,吸引用户关注,因为这类客户旅游出行的概率较大
    ③和景区酒店代理商合作,针对此类用户制定个性化推荐,多推荐价格相对实惠的酒店
    5.2.3低价值用户分析
    针对这部分客户,我们需要:
    ①不建议花费过多营销成本,但因为新用户居多,属于潜在客户,建议把握用户初期体验,还可以定期推送实惠的酒店给此类用户,以培养客户消费惯性为主
    ②推送的内容应多为大减价,大酬宾,跳楼价之类的
    ③由于这部分用户占比较多,可结合该群体流失情况分析流失客户因素,进行该群体市场的开拓,进一步进行下沉分析,开拓新的市场。

    展开全文
  • 论文研究-基于GMDH的“一步式”客户流失预测集成建模.pdf, 在客户流失预测问题中, 客户数据的特征往往会影响模型的预测效果.分析了常用的“两步式”客户流失 预测方法的...
  • 商业银行贵宾客户流失预测研究.pdf
  • 针对电信企业客户流失问题,提出采用贝叶斯决策树算法的预测模型,将贝叶斯分类的先验信息方法与决策树分类的信息熵增益方法相结合,应用到电信行业客户流失分析中,分别将移动公司的客户数据以及UCI 数据纳入到模型中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,423
精华内容 4,169
关键字:

做客户流失预测

友情链接: SQP.rar