客户终身价值(CLV)分析与仪表板构建

客户终身价值(CLV)是指企业从特定客户在其与企业关联期间所获得的利润。不同行业都有一套自己的指标,用于帮助企业定位正确的客户群体,并预测未来的客户基础。CLV使得市场、销售等部门能够规划他们的策略,为最有价值的客户提供特定的产品或定制服务。同时,它还为客服团队提供了一个框架,以了解需要投入多少努力来培养和保留客户。

CLV在与其他工具如客户细分、定价和营销策略一起应用时最为有效,它告诉哪些客户最有利可图,但并不告诉应该以什么价格和数量销售哪种产品。因此,CLV应该谨慎应用,不应成为做出商业决策的唯一标准。

CLV可能会根据商业模式和目标的变化而变化,这意味着其定义和计算需要定期重新审视。以下是不同行业如何使用CLV的例子:

保险业

市场团队会感兴趣的是,哪些客户最有可能支付高额保费而不提出索赔,这反过来帮助他们吸引新客户并扩大业务。

电信业

预测的CLV用于理解当前客户的忠诚度概率以及他们继续使用计划或订阅的可能性。

零售业

CLV用于理解购买行为和消费,以针对特定客户推出定制的优惠/折扣。

CLV的好处

获取成本:帮助确定可接受的获取成本和营销工作的重点。

潜在客户:帮助识别当前客户和潜在新客户的未来价值。

客户关系:使建立更强大、有效的客户关系成为可能。

品牌忠诚度:良好的关系有助于建立品牌忠诚度。

目标

将探索以下步骤,并通过本博客的末尾,构建一个使用Plotly Dash的客户终身价值模拟器应用。

将使用UCI机器学习库中的零售数据集(CSV)来构建Python应用。属性描述可以在上述URL中找到。让加载数据集并查看数据。

data = pd.read_excel("./data/Online_Retail.xlsx") data.head(10) data.info()

数据预处理:让清理数据,并创建稍后计算CLV所需的新特征。

数据清洗:移除重复记录。

数量:只考虑正数量。任何负值表明产品因某种原因被退回。

总购买:这将是单价乘以数量。

聚合:由于数据在交易层面,让通过CustomerID和Country进行数据聚合。

平均订单价值:这将是花费的钱与交易数量的比率。

购买频率:这是交易总和与总交易数量的比率。它是每个客户的平均订单数量。

流失率:这是没有再次下单的客户百分比。

CLTV:(平均订单价值 x 购买频率)/ 流失率

还将重命名一些列名,以便于跟踪。完成上述步骤后,数据将如下所示。将在后续过程中进一步处理这些数据。

使用Plotly Dash开发应用

将使用Plotly Dash开发应用,这是一个用于构建数据应用的Python框架。让创建一个名为app.py的文件,并从加载库开始。

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import datetime as dt import numpy as np import dash import dash_table import dash_core_components as dcc import dash_html_components as html from dash.dependencies import Input, Output, State

设计布局(UI):将跟踪的所有4个KPI将在页面顶部。定义了字体大小和颜色等美学,并为每个卡片定义了唯一ID,稍后将用于填充值。

有两个图表,一个条形图展示了最畅销的产品,第二个是各国购买趋势的图表。

条形图:df_plot_bar = pp.filtered_data.groupby('Description').agg({'TotalPurchase':'sum'}).sort_values(by = 'TotalPurchase', ascending=False).reset_index().head(5)

df_plot_bar['percent'] = round((df_plot_bar['TotalPurchase'] / df_plot_bar['TotalPurchase'].sum()) * 100,2).apply(lambda x : "{:,}".format(x))

fir_plotbar = px.bar(df_plot_bar, y='percent', x='Description', title='TOP SELLING PRODUCTS', text='percent', color='percent',)

fir_plotbar.update_traces(texttemplate='%{text:.2s}', textposition='inside')

fir_plotbar.update_layout(uniformtext_minsize=8, uniformtext_mode='hide', showlegend=False)

散点图:df_plot = df.groupby(['Country','Description','UnitPrice','Quantity']).agg({'TotalPurchase': 'sum'},{'Quantity':'sum'}).reset_index()

fig_UnitPriceVsQuantity = px.scatter(df_plot[:25000], x="UnitPrice", y="Quantity", color = 'Country', size='TotalPurchase', size_max=20, log_y= True, log_x= True, title= "PURCHASE TREND ACROSS COUNTRIES")

类似于卡片和图表,其余的UI组件如侧边栏、用于显示结果的表格都被设计好了。请访问Github上的完整layout.py代码。

定义了一个函数update_output_All(),它接受控件的值作为输入,执行逻辑,即生成视觉和数据表,这些将被填充在UI上。交互性在两个级别上被拒绝——

应用加载:所有的卡片、图表、KPI和表格将显示所有国家的数据。

用户选择:一旦用户选择了一个特定的国家,所有的卡片、图表和表格将显示特定国家的数据。

def update_output_All(country_selected): try: if (country_selected != 'All' and country_selected != None): df_selectedCountry = pp.filtered_data.loc[pp.filtered_data['Country'] == country_selected] df_selectedCountry_p = pp.filtered_data_group.loc[pp.filtered_data_group['Country'] == country_selected] cnt_transactions = df_selectedCountry.Country.shape[0] cnt_customers = len(df_selectedCountry.CustomerID.unique()) cnt_sales = round(df_selectedCountry.groupby('Country').agg({'TotalPurchase':'sum'})['TotalPurchase'].sum(),2) ......... return [cnt_customers, cnt_transactions, cnt_sales, cnt_avgsales, df_selectedCountry_p.drop(['num_days','num_units'], axis = 1).to_dict('records'), fig_UnitPriceVsQuantity_country, fir_plotbar] else: cnt_transactions = pp.filtered_data.shape[0] cnt_customers = len(pp.filtered_data.CustomerID.unique()) cnt_sales = round(pp.filtered_data.groupby('Country').agg({'TotalPurchase':'sum'})['TotalPurchase'].sum(),2) cnt_avgsales = round(pp.filtered_data_group.groupby('Country').agg({'avg_order_value': 'mean'})['avg_order_value'].mean()) ......... return [cnt_customers, cnt_transactions, cnt_sales,cnt_avgsales, pp.filtered_data_group.drop(['num_days','num_units'], axis = 1).to_dict('records'), pp.fig_UnitPriceVsQuantity, fir_plotbar] except Exception as e: logging.exception('Something went wrong with interaction logic:', e)

完整的代码可以从app.py访问。

本博客的目标是介绍一种用Python计算客户终身价值(CLV)的公式方法,并构建一个仪表板/网络应用,以帮助企业用户实时做出决策。还涉及了从数据探索到公式以及一些行业案例,CLV可以被利用的各个方面。

这个项目设置可以作为一个模板,快速复制到其他用例。

可以构建一个更复杂的预测模型来计算CLV。

根据案例,添加更多相关的控件和图表,增加更多的交互性。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485