日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
利用Python群組分析方法剖析客戶行為

簡介

如今,企業(yè)有能力收集大量的數(shù)據(jù)。這些數(shù)據(jù)可以幫助企業(yè)制定更好的策略并了解其客戶的行為。在這一點上,Cohort分析就發(fā)揮作用了。Cohort分析是一種了解客戶行為或用戶互動的強大工具,并為企業(yè)提供有價值的見解。在本文中,將學習如何使用Python進行Cohort分析。

Cohort分析

Cohort分析是一種經(jīng)常在市場營銷、客戶忠誠度、用戶體驗和產(chǎn)品開發(fā)等領域使用的數(shù)據(jù)分析技術(shù)。通過這種分析方法,我們可以詳細了解特定時期內(nèi)人群或群體的行為。Cohort用于識別具有相似特征或經(jīng)歷的人群或群體。

例如,對于電子商務業(yè)務,可以使用Cohort分析來監(jiān)測不同的群體,比如客戶群體、來自特定地區(qū)的群體或偏好特定產(chǎn)品類別的群體。通過這種分析,我們可以研究特定群體在一段時間內(nèi)的行為和傾向。

應用Cohort分析

本文有一個由12個表組成的關(guān)系數(shù)據(jù)庫。本文將在Python通過MS SQL從這個表中提取所需的特征。在進行必要的預處理操作后,本文將使數(shù)據(jù)適合進行分析。接下來從查看數(shù)據(jù)庫開始。

本文需要兩個特征。這兩個特征是客戶ID和訂單日期。本文的目標是查看我們能夠保留多少客戶,并在其首次到達日期后的每個月基礎上保留多長時間。

本文想要的特征包含在一個單獨的表中。因此,在查詢過程中,不需要從其他表中提取屬性。然而,為了舉例說明,假設本文將在兩個表上工作,接下來使用MS SQL中的JOIN獲取本文想要的特征。

SELECT * FROM ORDERS

圖片

SELECT * FROM USERS

圖片

SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID

圖片

本文通過JOIN從USERS和ORDERS表中調(diào)用具有相同ID值的屬性?,F(xiàn)在,為了在Python中進行分析,本文將訪問該數(shù)據(jù)庫,在其中運行我們的查詢,并將數(shù)據(jù)作為數(shù)據(jù)幀在我們的操作中使用。

首先,導入本文所需要的庫。

import pandas as pd
import sqlalchemy as sa
import urllib
from datetime import datetime

在第二步中,本文使用urllib.parse.quote_plus函數(shù)來保護連接字符串免受環(huán)境因素的影響,并將連接信息寫入這個將用于連接SQL Server數(shù)據(jù)庫的字符串中。

params = urllib.parse.quote_plus("DRIVER={SQL Server};"
 "SERVER=DESKTOP-F3H252;"
 "DATABASE=E-COMMERCE;")

注:如果不知道服務器名稱,可以通過查詢"SELECT @@SERVERNAME"來找到它。

接下來,本文使用"SQLAlchemy (sa)"庫創(chuàng)建與SQL Server數(shù)據(jù)庫的連接。使用"sa.create_engine"函數(shù),我們可以利用連接字符串和其他連接設置創(chuàng)建一個鏈接引擎。"odbc_connect"參數(shù)用于ODBC連接,并包含之前轉(zhuǎn)換的連接字符串。

engine = sa.create_engine("mssql+pyodbc:///?odbc_cnotallow={}".format(params))

在下一步中,本文將創(chuàng)建一個SQL查詢。我們使用查詢"SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID"來獲取我們想要的特征。

qry ="SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID"

我們通過"engine"對象建立數(shù)據(jù)庫連接,并在"with"代碼塊中使用該連接。這將自動關(guān)閉連接。我們使用"con.execute(qry)"運行SQL查詢并獲取結(jié)果集(rs)。最后,我們將結(jié)果集轉(zhuǎn)換為Pandas DataFrame。

with engine.connect() as con:
    rs = con.execute(qry)
    df = pd.DataFrame(rs)

圖片

我們知道沒有缺失數(shù)據(jù),但在這一點上,讓我們檢查并消除它。

df.isnull().sum()
ID 0

DATE_ 0

dtype: int64

由于我們將按月進行工作,所以小時數(shù)對我們來說并不重要,所以我們首先要刪除小時數(shù),然后再刪除天數(shù)。首先,我們將日期列(DATE_)轉(zhuǎn)換為日期時間格式,然后只獲取日期。

df['DATE_'] = pd.to_datetime(df['DATE_'])
df['DATE_'] = df['DATE_'].dt.date

圖片

本文的下一步行動是刪除天數(shù)。接下來為此定義一個lambda函數(shù)。希望保留年份和月份的值。datetime(x.year, x.month, 1)將使用年份和月份信息創(chuàng)建一個新的日期對象,其中包含該月的第一天。

get_year_month = lambda x: datetime(x.year, x.month, 1)

接下來使用這個函數(shù)創(chuàng)建一個新的變量,并將新數(shù)據(jù)存儲在'DATE_MONTH'列中。

df['DATE_MONTH'] = df['DATE_'].apply(get_year_month)

現(xiàn)在,本文將根據(jù)客戶ID對要執(zhí)行的流程進行分組,并通過創(chuàng)建'COHORT_MONTH'變量在這一列中保留每個客戶的首次到達日期。

user_first_date = df.groupby('ID')['DATE_MONTH']
df['COHORT_MONTH'] = user_first_date.transform('min')

圖片

當我們查看所獲得的值時,如果對第一個訂單日期和其他訂單日期進行評估,就可以很容易地找到差異。我們可以通過創(chuàng)建一個新的'COHORT_INDEX'變量,將差異保留在這一列中。

years_diff = df['DATE_MONTH'].dt.year - df['COHORT_MONTH'].dt.year
months_diff = df['DATE_MONTH'].dt.month -df['COHORT_MONTH'].dt.month
df['COHORT_INDEX'] = years_diff * 12 + months_diff + 1

接下來計算每個首次到達日期的活躍客戶的月度數(shù)量。通過分組,本文創(chuàng)建了一個名為cohort_data的數(shù)據(jù)幀,其中包含了每個月首次到達的唯一客戶數(shù)量。

grouping_count = df.groupby(['COHORT_MONTH', 'COHORT_INDEX'])
cohort_data = grouping_count['ID'].apply(pd.Series.nunique)
cohort_data = cohort_data.reset_index()
cohort_data.head()

圖片

本文將cohort_data數(shù)據(jù)幀整理到數(shù)據(jù)透視表中,并創(chuàng)建一個名為cohort_user_counts的新數(shù)據(jù)幀。該數(shù)據(jù)幀將包含每個群體的月活躍客戶數(shù)量。

本文將計算每個客戶的活躍百分比。通過將每個月群體中的客戶數(shù)除以初始客戶數(shù)來實現(xiàn)此目的。

cohort_sizes = cohort_user_counts.iloc[:,0]
retention = cohort_user_counts.divide(cohort_sizes, axis=0)
retention.index = retention.index.strftime('%m-%Y')

圖片

最后,本文將在熱圖上可視化retention數(shù)據(jù)幀。

sns.set(style = 'white')
plt.figure(figsize = (15, 6))
plt.title('Cohort: Retention rate by month')
sns.heatmap(
            retention
            ,cmap = plt.cm.Reds
            ,annot = True
            ,fmt = '.0%'
            )
plt.xlabel("Ongoing months"
plt.ylabel("First arrival date")
plt.show()

圖片

如上所述,圖表中的百分比表達的是活躍率。從中可以推斷出的內(nèi)容應該回答了我們可以保留客戶多長時間的問題。

在這篇文章中,我們提到了Cohort分析,并制作了一個可以輕松使用的應用程序。


標題名稱:利用Python群組分析方法剖析客戶行為
本文網(wǎng)址:http://m.5511xx.com/article/cdehsio.html