提升客户忠诚度的数据分析应用

知道吗?获取新客户的成本是保持现有客户的五倍,而且现有客户尝试新产品的可能性要高出50%,并且比新客户多花费31%。无论是否拥有一个鼓励客户回头并进行更多业务的忠诚度计划,这都清楚地表明了成功的客户忠诚度计划的重要性和影响。

在这篇文章中,将使用Python Dash构建一个应用,通过将客户分成不同的类别,帮助企业做出数据驱动的决策以提高客户忠诚度。以下是将在文章结束时构建的应用的快照。

数据与处理

将使用来自Kaggle的电子商务数据集,以下是数据的快照。“忠诚客户是那些即使产品不打折也会购买产品,并向朋友推荐产品的人。”

将通过最近一次购买的时间(Recency)、在给定时间段内进行的交易次数(Frequency)以及在给定时间段内花费的金额(Monetary)来进行行为细分,这些将在稍后计算。让在进一步进行之前先了解这些定义。

以下是代码块,它创建了新的变量,包括Recency、Frequency和Monetary:

df['TotalSum'] = df['Quantity'] * df['UnitPrice'] # 创建快照日期 snapshot_date = df['InvoiceDate'].max() + timedelta(days=1) # 按CustomerID分组 data_process = df.groupby(['CustomerID']).agg({ 'InvoiceDate': lambda x: (snapshot_date - x.max()).days, 'InvoiceNo': 'count', 'TotalSum': 'sum'}) # 重命名列 data_process.rename(columns={'InvoiceDate': 'Recency', 'InvoiceNo': 'Frequency', 'TotalSum': 'MonetaryValue'}, inplace=True)

为了避免这篇文章过长,一些涉及探索数据分布、清理数据、数据整理的代码没有详细说明,可以从Github上访问。数据处理结束后,应用阈值来分类并生成数据框。

构建应用

将使用Dash构建应用,Dash是一个开源的Python框架,用于分析应用。它建立在Flask、Plotly.js和React.js之上。如果使用Python进行数据探索、分析、可视化、建模或报告,会发现它对于构建高度交互式的分析Web应用非常有用,而且代码量非常少。将探索一些关键特性,包括DCC和DAQ组件,使用Plotly Express进行可视化,并为Python中的客户忠诚度计划构建一个应用。

让构建一个交互式的饼图,它根据用户从UI中所做的选择进行更新。现在,将有一个占位符,稍后将其连接到数据和回调()函数。

html.Div( children=[ html.H6("客户细分"), dcc.Graph(id="heatmap"), ], )

类似地,让为Recency和Frequency的分布图保留一个占位符,视觉将根据用户从下拉菜单中选择的国家进行更新。

html.Div( children=[ html.H6("最近一次购买与频率分布"), dcc.Graph(id="dist"), ], )

拥有Recency与Frequency、Recency与Monetary以及Frequency与Monetary的散点图将非常有洞察力。以下是其中一个的代码片段供参考,将为其他组合做同样的事情,确保每个图表的id是唯一的。

html.Div( children=[ html.H4("最近一次购买与Monetary"), dcc.Graph(id="fig_mr"), ], )

需要一个下拉菜单,列出国家,这些国家将从数据集中动态填充。

html.H6("选择国家"), dcc.Dropdown( id="country-dropdown", options=[ {"label": i, "value": i} for i in tmp_df[0]['Country'].unique() ], value='选择...' ),

其他控件,如单选按钮、DAQ切换开关控件,可以类似地添加。要了解如何添加这些字段,请参阅完整的代码。

在上一节中,已经设计了带有控件和占位符的前端。现在,这两个应该在用户更改输入时相互交互,这可以通过回调来实现。回调是Python函数,每当输入组件的属性发生变化时,Dash会自动调用它们。

@app.callback( Output("heatmap", 'figure'), [ Input("category-type", "value"), Input("country-dropdown", "value") ] ) def update_pieChart(category, country): """[摘要] 参数: category ([value]): [用户从单选按钮中选择的类别值] country ([value]): [从下拉菜单中选择的国家] 返回值: [figure]: [返回fig对象,这是一个饼图] """ try: if country == "选择...": fig = px.pie(df_pieChart, values='RFM_Level_cnt', names='RFM_Level', template="ggplot2") fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) fig.update_layout(legend=dict( orientation="h", )) logging.debug('饼图生成成功') return fig else: filtered = df_pieChart[df_pieChart['Country'] == country] fig = px.pie(filtered, values='RFM_Level_cnt', names='RFM_Level') fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) fig.update_layout(legend=dict( orientation="h", )) return fig

类似的回调函数被编写以构建视觉和数据之间的交互性,这些数据由相应的逻辑生成。还可以在UI上添加表格,并实现回调,这些回调会在运行时填充数据——表格将根据数据量增长和缩小。可以在这里找到完整的代码。

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