Управление взаимоотношениями с клиентами (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")
Эта информация может быть передана другим отделам фирм, чтобы они знали, с кем общаться.
Ссылки: