数据挖掘 | 航空公司客户流失预测
之前的一篇博客介绍了关于,今天的这篇博客将对航空公司的客户的流失进行预测。采用的是相同的数据集。
1. 背景
因此,在国内航空市场竞争日益激烈的背景下,航空公司在客户流失方面应该高度重视。本次项目的目的是根据航空公司的数据对老客户的流失做出预测。
2. 建模前
客户流失预测主要针对老客户。这里的老客户的界定是飞行次数大于 6 次。
2.1 类别标记
接下来给老客户打标签,将第二年飞行次数与第一年飞行次数相比比例小于50%的标记为流失客户,记为 1;将第二年飞行次数与第一年飞行次数相比比例大于等于50%的标记为非流失客户,记为 0。
用Python实现的方法如下:
airline[class] = airline[L1Y_Flight_Count] / airline[P1Y_Flight_Count] def class(x): if x >= 0.5: return 0 else: return 1 airline[class] = airline[class].apply(class)
2.2 特征选择
选择如下变量作为预测的特征:
FFP_TIER AVG_INTERVAL avg_discount BP_SUM WEIGHTED_SEG_KM EXCHANGE_COUNT Points_Sum Point_NotFlight Eli_Add_Point_Sum FLIGHT_COUNT SEG_KM_SUM EP_SUM ADD_Point_SUM
2.3 数据预处理
这里的数据预处理主要包括两个:
-
对 FFP_TIER 进行onehot编码
train_data = airline.iloc[1:,0:13] tmp = np.array(train_data.iloc[:,0:1]) tmp2 = OneHotEncoder(sparse=False).fit_transform(tmp[:, (0,)]) X = np.hstack((train_data.iloc[:,1:], tmp2))
-
对数据进行标准化处理
3. 建模
对客户流失预测可选择的机器学习方法有很多,本案例采用随机森林进行建模预测。
3.1 训练集预测集划分
按照 8 : 2 的比例对数据集进行划分
train_x, test_x, train_y, test_y = train_test_split(X, y, test_size = 0.2, random_state = 123)
3.2 训练模型
from sklearn.ensemble import RandomForestClassifier clf = RandomForestClassifier() clf.fit(train_x, train_y)
3.3 训练结果
准确率
acc = clf.score(test_x, test_y) print(acc) >> 0.769384308306464
混淆矩阵
from sklearn.metrics import confusion_matrix, precision_recall_curve cm = confusion_matrix(test_y, predict_y) print(cm) # 输出 [[4831 140] [1362 180]]
混淆矩阵可视化 PR曲线 特征重要性 随机森林模型可以对特征的重要性进行排序,得到的结果如下图。
结论
从结果来看,客户的流失率预测的准确率并不高。可以通过如下方法来尝试提高预测准备率:
- 寻找最佳的超参数,在本案例中并没有对参数进行调整,采用的是默认参数。
- 尝试其他不同的模型,常见的表现不错的模型有:Logistic Regression, SVM, xgboost等。
- 特征选择,重新选择特征,可以采用加入特征或删除特征的方法来看对结果的贡献。
上一篇:
通过多线程提高代码的执行效率例子