Управление взаимоотношениями с клиентами (CRM) является одной из наиболее важных функций для предприятий, позволяющих управлять отношениями с клиентами, анализировать их и улучшать. Аналитика CRM действительно важна, особенно для отделов продаж и маркетинга компаний.

Анализ RFM (Recency, Frequency, Monetary) — это метод, который используется для лучшего понимания покупательского поведения клиентов. RFM заставляет специалистов по данным создавать группы в соответствии с покупательским поведением клиентов.

Давность. Время между сегодняшней датой и датой последней покупки клиентом.

Частота – как часто клиенты совершают покупки? Общее количество покупок, сделанных клиентом.

Денежный/ общий объем денежных средств, потраченных клиентом с первого дня, когда он начал тратить.

Наша цель — создать значения RFM и разделить клиентов в соответствии с их оценкой RFM, чтобы мы могли стандартизировать наши данные. Целью этого процесса является разработка стратегии для наших клиентов. Создавая оценку RFM, мы можем лучше понять поведение наших клиентов.

СЛУЧАЙ:

Получены данные одной из обувных фирм. Наша работа здесь заключается в том, чтобы найти нужную группу клиентов, чтобы компания могла зарабатывать гораздо больше денег. Анализ RFM помогает нам в этом. Сохранение существующих клиентов гораздо более выгодным для фирм.

Давайте импортируем библиотеки и внесем некоторые коррективы в десятичные дроби.

import pandas as pd
df_=pd.read_csv("flo_data_20k.csv")
df=df_.copy()
pd.set_option("display.max_columns",None)
pd.set_option("display.width",500)
pd.set_option("display.float_format",lambda x: "%.4f" % x)

Позволяет определить переменные

канал заказа: какая торговая платформа используется.

интересующие_in_categories_12: категории расходов клиентов за последние 12 месяцев.

customer_value_total_ever_offline: общие расходы клиентов на офлайн-покупки.

давайте создадим переменные order_num_total и customer_value_total.

df["order_num_total"]=df["order_num_total_ever_online"]+df["order_num_total_ever_offline"]
df["customer_value_total"]=df["customer_value_total_ever_offline"]+df["customer_value_total_ever_online"]

Сегодняшнюю дату можно получить и преобразовать «тип столбца даты» из объекта в дату и время:

import datetime as dt
df.sort_values("last_order_date",ascending=False).head(10)
df["last_order_date"].max()
today_date=dt.datetime(2021,6,1)
type("last_order_date")
for i in df.columns:
    if "date" in i:
       df[i] = df[i].astype("datetime64[ns]")

Позволяет сгруппировать каналы заказов и наблюдать за общим количеством покупок и значением клиента value_total.

Давайте создадим метрики RFM и определим их как недавность, частоту, денежный.

rfm=df.groupby("master_id").agg({"last_order_date":lambda x:(today_date-x.max()).days,
                                   "order_num_total": lambda y:y.sum(),
                                   "customer_value_total":lambda z:z.sum()})
rfm.columns=["recency","frequency","monetary"]

Превратим метрики RFM в баллы от 1 до 5 с помощью метода qcut().

rfm["recency_score"]=pd.qcut(rfm["recency"],5,labels=[5,4,3,2,1])
rfm["monetary_score"]=pd.qcut(rfm["monetary"],5,labels=[1,2,3,4,5])
rfm["frequency_score"]=pd.qcut(rfm["frequency"].rank(method="first"),5,labels=[1,2,3,4,5])

Примечание. Поскольку недавнее значение более ценно с точки зрения давности, поэтому мы даем наивысший балл последним значениям.

RF Score создается с помощью следующего кода.

rfm["rf_score"]=(rfm["recency_score"].astype(str)+rfm["frequency_score"].astype(str))

Карту сегментации можно увидеть ниже. Эта карта является стандартной в отрасли.

Сегменты недавность, частота и денежные средства и подсчеты можно наблюдать.

Анализируя эту информацию, мы можем лучше понимать переменные . Например, обувная фирма хочет достичь категории детей и мужчин, чтобы сделать скидку 40%, но эта скидка действительна только для категории (не может потерять, спящие и новые клиенты). Следующий код помогает нам достичь их.

new2_df=df[(df["interested_in_categories_12"]).str.contains("ERKEK","COCUK")]
new2_rfm=rfm[(rfm["segment"]=="cant_loose")|(rfm["segment"]=="hibernating")|(rfm["segment"]=="new_customers")]

Наконец мы создаем новый rfm, извлекаем его и преобразуем в csv.

finalrfm2=new2_df.merge(new2_rfm,on="master_id",how="left")
finalrfm2.to_csv("finalrfm2.csv")

Эта информация может быть передана другим отделам фирм, чтобы они знали, с кем общаться.

Ссылки:

https://courses.miuul.com/