使用机器学习预测客户下次购买
在竞争激烈的市场中,留住客户对于成功至关重要。留住现有客户比获取新客户更经济有效。客户留存率带来忠诚的客户群体、更高的收入和长期的盈利能力。然而,许多因素,包括经济状况、竞争和时尚趋势,使得预测客户行为和偏好变得困难。为了应对这些挑战,企业需要利用先进的机器学习和数据分析能力来分析客户数据并做出准确预测。通过预测客户的下次购买,企业可以调整营销策略,改进客户体验,提高客户满意度,最终提高留存率和忠诚度。在本文中,我们将运用机器学习来预测读者的下次购买。
使用机器学习预测客户下次购买
以下是使用机器学习预测客户即将购买的逐步指南:
通过加载数据、进行特征工程、数据清洗和导入必要的库来收集和准备数据
从数据中创建训练集和测试集。
利用训练数据,创建一个随机森林回归模型
使用多种指标评估模型的性能,包括解释方差得分、R方、平均绝对误差和均方误差。
算法
导入必要的库,包括datetime、numpy和pandas。
使用pd.read_excel()加载数据,然后将其保存为DataFrame。
删除任何缺少CustomerID的条目,因为如果没有CustomerID,我们就无法预测客户的下次购买。为此,使用df = df[df['CustomerID'].notna()]。
删除任何数量为0或值为负的记录,因为这些记录可能不正确。为此使用的公式是df = df[df['Quantity'] > 0]。
删除任何价格为负或为零的条目,因为这些也可能是错误的。为此使用的公式是df = df[df['UnitPrice'] > 0]。
使用pd.to_datetime()将InvoiceDate列转换为datetime对象。
TotalPrice,它是数量和价格列的结果,表示每次交易的总成本。
每次交易的年份和月份在InvoiceYearMonth列中找到,该列是从InvoiceDate列派生的。
LastPurchaseDate - 每个客户上次购买的日期。
DaysSinceLastPurchase - 自每个客户上次购买以来已经过去了多少天
NextPurchaseDate是一个随机选择的日期,介于客户上次购买后的7到30天之间。
DaysUntilNextPurchase - 每个客户下次购买之前的持续时间。
选择CustomerID、TotalPrice、InvoiceYearMonth、DaysSinceLastPurchase和DaysUntilNextPurchase作为我们希望用于训练模型的列
使用df = df.drop_duplicates()删除任何重复的行。
收集和准备数据
在这个阶段,我们获取数据并进行必要的特征工程和数据清洗。UCI机器学习资源库在这里公开提供在线零售数据集,我们可以将其用于此项目。
# Import libraries import pandas as pd import numpy as np from datetime import datetime, timedelta from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score, explained_variance_score # Step 1: Gather and Prepare the Data df = pd.read_excel('/content/sample_data/online_retail_II.xlsx') df = df[df['Customer ID'].notna()] # Remove rows without CustomerID df = df[df['Quantity'] > 0] # Remove rows with negative or zero quantity df = df[df['Price'] > 0] # Remove rows with negative or zero price # Parse dates df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate']) # Create features df['TotalPrice'] = df['Quantity'] * df['Price'] df['InvoiceYearMonth'] = df['InvoiceDate'].apply(lambda x: x.strftime('%Y%m')) df['LastPurchaseDate'] = df.groupby('Customer ID')['InvoiceDate'].transform('max') df['DaysSinceLastPurchase'] = (df['LastPurchaseDate'].max() - df['LastPurchaseDate']).dt.days df['NextPurchaseDate'] = df.groupby('Customer ID')['InvoiceDate'].transform(lambda x: x.max() + timedelta(days=np.random.randint(7, 30))) df['DaysUntilNextPurchase'] = (df['NextPurchaseDate'] - df['InvoiceDate']).dt.days df = df[['Customer ID', 'TotalPrice', 'InvoiceYearMonth', 'DaysSinceLastPurchase', 'DaysUntilNextPurchase']] df = df.drop_duplicates()
将数据分成训练集和测试集
使用公式X = df.drop(['DaysUntilNextPurchase'], axis=1)和y = df['DaysUntilNextPurchase']将自变量(X)与因变量(y)分开。
利用train_test_split()将数据分成训练集和测试集。我们指定随机状态为42,测试大小为0.2,即20%。
在这个阶段,我们将数据分成训练集和测试集。
# Step 2 − Split the Data into Training and Testing Sets X = df.drop(['DaysUntilNextPurchase'], axis=1) y = df['DaysUntilNextPurchase'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
训练机器学习模型
应导入sklearn.ensemble的RandomForestRegressor类。
将n_estimators设置为100,并将random_state设置为42,创建一个新的类实例。
Model.fit(X_train, y_train)将模型拟合到训练数据。
基于训练数据,我们现在训练一个随机森林回归模型。
# Step 3 − Train the Machine Learning Model model = RandomForestRegressor(n_estimators=100, random_state=42) model.fit(X_train, y_train)
评估模型
model.predict(X_test)使用学习到的模型根据测试数据做出预测。
使用mean_absolute_error(y_test, y_pred)计算平均绝对误差(MAE)。
均方误差(MSE)可以使用公式mean_squared_error(y_test, y_pred)计算。
R方(R2)可以使用公式r2_score(y_test, y_pred)计算。
此时,我们使用一系列指标来评估模型的有效性。
# Step 4− Evaluate the Model y_pred = model.predict(X_test) mae = mean_absolute_error(y_test, y_pred) mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) evs = explained_variance_score(y_test, y_pred) print('Mean Absolute Error:', mae) print('Mean Squared Error:', mse) print('R-squared:', r2) print('Explained Variance Score:', evs)
结果
Mean Absolute Error− 2.8361809953950248 Mean Squared Error − 31.313248452439648 R-squared − 0.9975804147472181 Explained Variance Score − 0.9975804233638988
均方误差(MSE)计算预期值和实际值之间的平均差异。R2统计量表示模型解释的目标变量变化的百分比。与总体方差相比,EVS计算模型解释的目标变量变化的百分比。
结论
总之,本文中使用的方法包括获取和处理客户数据、将其分成训练集和测试集、训练机器学习模型以及使用多种指标评估模型的性能。预测客户的下次购买,可以有多种潜在用途,例如个性化营销策略、改进客户体验和提高客户留存率。