當前位置:成語大全網 - 新華字典 - 小紅書營銷渠道效果預測分析

小紅書營銷渠道效果預測分析

分析背景說到小紅書,是目前非常熱門的電商平臺,和其他電商平臺不同,小紅書是從社區起家。在小紅書社區,用戶通過文字、圖片、視頻筆記的分享,記錄了這個時代年輕人的正能量和美好生活。小紅書通過機器學習對海量信息和人進行精準、高效匹配,已累積海量的海外購物數據,分析出最受歡迎的商品及全球購物趨勢,並在此基礎上把全世界的好東西,以最短的路徑、最簡潔的方式提供給用戶。本項目協助小紅書分析不同的業務決策所帶來的銷售額變化。分析目標根據用戶數據以及消費行為數據使用Python建立線性回歸模型預測用戶的消費金額變化找到對用戶消費影響較大的因素分析流程數據概況分析(數據行列數量,缺失值分布,數據清洗)--單變量分析(數字型變量的描述指標、類別型變量(多少分類,各自占比))--相關和可視化(按類別交叉對比,變量之間的相關性分析,散點圖/熱力圖)--回歸模型(模型建立、模型評估和優化)壹、數據概況分析1.1數據概覽先導入數據:#導入數據#調包importpandasaspdimportnumpyasnp#讀取數據xhs=pd.read_csv(r'c:\Users\LENOVO\Desktop\項目數據\小紅書數據.csv')xhs.info()gender\age\engaged_last_30存在空值gender、engaged_last_30數據類型錯誤:應該為object類型數據***29452行xhs.head()數據***8列數據字典如下:xhs.describe()可以看出revenue和previous_order_amount的標準差都較大,數據或許有離群值1.2數據清洗#統計數據空值xhs.isnull().sum()#缺失情況xhs.isna().sum()/xhs.shape[0]缺失值占比約為40%,不能直接刪除缺失值,否則會損失非常多的數據1.2.1類別型變量缺失值處理#gender(類別型變量)#先把缺失值填充為unknownxhs['gender']=xhs['gender'].fillna('unknown')#engaged_last_30(是否參加重要活動)(類別型變量)#把缺失值填充為unknownxhs['engaged_last_30']=xhs['engaged_last_30'].fillna('unknown')xhs.info()gender和engaged_last_30已變成object類型1.2.2數字變量缺失值處理#處理數字變量缺失值age——均值填補xhs=xhs.fillna(xhs.mean())#所有空值均值填充xhs.describe()均值填充完畢1.2.3數字變量離群值處理離群值:壹般地,我們認定超過75%分位數的1.5倍的四分位差的數值為離群值#revenue離群值計算diff=xhs.revenue.describe()['75%']-xhs.revenue.describe()['25%']new_max=xhs.revenue.describe()['75%']+1.5*diff#previous_order_amount離群值計算diff1=xhs.previous_order_amount.describe()['75%']-xhs.previous_order_amount.describe()['25%']new_max1=xhs.previous_order_amount.describe()['75%']+1.5*diff1revenue離群值:(>=輸出的數據)previous_order_amount離群值:(>=輸出的數據)要去除的離群值行占所有數據行的比例約為13%,較為合理:(xhs.shape[0]-xhs[np.logical_and(xhs['previous_order_amount']<6286,xhs['revenue']<=1135)].shape[0])/xhs.shape[0]去除離群值:xhs=xhs[np.logical_and(xhs['previous_order_amount']<6286,xhs['revenue']<=1135)]xhs.describe()二、單變量分析importmatplotlib.pyplotaspltimportseabornassns%matplotlibinline2.1數字型變量2.1.1用戶下單金額revenuesns.distplot(xhs['revenue'])集中分布在0-200之間2.1.2用戶以往累積購買金額previous_order_amountsns.distplot(xhs['previous_order_amount'])用戶以往累積金額為0-100的頻數較高2.1.3年齡agesns.distplot(xhs['age'])xhs['age'].value_counts()用戶年齡分布在14-45歲之間,用戶年齡平均值為29.4歲,用戶年齡中位數為29.4歲,用戶年齡在平均值兩側呈對稱分布絕大部分用戶年齡集中在27-32歲之間10380個用戶的年齡為29.419286歲,29歲或是小紅書的默認年齡選項2.1.4用戶最近壹次下單距今的天數days_since_last_order#查看xhs的列名xhs.columns發現'days_since_last_order'前後各有壹個空格#修改列名xhs.rename(columns={'days_since_last_order':'days_since_last_order'},inplace=True)sns.distplot(xhs['days_since_last_order'])用戶最近壹次下單距今的天數分布在0-23.7天之間,可見所有的用戶在本月內都有下單行為用戶最近壹次下單後平均7.7天後會再次下單用戶最近壹次下單距今0-1天的頻數較高2.2類別型變量2.2.1生命周期lifecycle不同生命周期(lifecycle)對應的revenue(銷售額)是怎樣的生命周期,分類為A,B,C(分別對應註冊後6個月內,1年內,2年內)xhs.groupby(['lifecycle'])['revenue'].describe()#不同生命周期計數xhs['lifecycle'].value_counts(dropna=False).plot(kind='bar')#不同生命周期的銷售額平均值sns.barplot(x='lifecycle',y='revenue',data=xhs,order=['C','B','A'])#不同生命周期的銷售額總和sns.barplot(x='lifecycle',y='revenue',data=xhs,order=['C','B','A'],estimator=sum)C(註冊後兩年)的用戶最多C(註冊後兩年內的)用戶銷售額平均值最高,為267.5;其次是B(註冊後壹年內的)用戶,銷售額平均值為253.7;銷售額平均值最低的是A(註冊後6個月內的)用戶,銷售額平均值為245.5.總銷售額大部分由C(註冊後兩年)的用戶創造2.2.2性別gender不同性別(gender)對應的revenue(銷售額)是怎樣的xhs.groupby(['gender'])['revenue'].describe()#不同性別計數xhs['gender'].value_counts(dropna=False).plot(kind='bar')#不同性別的銷售額平均值sns.barplot(x='gender',y='revenue',data=xhs)#不同性別的銷售額總和sns.barplot(x='gender',y='revenue',data=xhs,estimator=sum)女性顧客遠遠超過男性顧客數量女性顧客的銷售額平均值和男性顧客的消費額平均值相差不大總銷售額大部分由女性顧客貢獻2.2.3最近30天在APP上參與重要活動engaged_last_30最近30天在APP上參與重要活動與否對應的銷售額是怎樣的xhs.groupby(['engaged_last_30'])['revenue'].describe()#計數xhs['engaged_last_30'].value_counts(dropna=False).plot(kind='bar')#最近30天在APP上參與重要活動與否對應的銷售額平均值sns.barplot(x='engaged_last_30',y='revenue',data=xhs)#最近30天在APP上參與重要活動與否對應的銷售額總和sns.barplot(x='engaged_last_30',y='revenue',data=xhs,estimator=sum)大部分用戶30天內未在APP上參加活動最近30天在APP上參與了活動的用戶的銷售額平均值更大,為320.3,未參加活動的用戶的銷售額平均值為252元。總銷售額的大部分由30天內未在APP上參加活動的用戶創造2.2.4用戶過往在第三方APP購買的數量xhs['3rd_party_stores'].describe()#用戶過往在第三方APP購買的數量計數xhs['3rd_party_stores'].value_counts().plot(kind='bar')#用戶過往在第三方APP購買的數量對應的銷售額平均值sns.barplot(x='3rd_party_stores',y='revenue',data=xhs)#用戶過往在第三方APP購買的數量對應的銷售額總和sns.barplot(x='3rd_party_stores',y='revenue',data=xhs,estimator=sum)從未在第三方APP購買過的顧客最多,其次是在第三方APP購買過10次的顧客從未在第三方APP購買過的顧客的平均銷售額最多;在第三方APP進行了1-5次購買的顧客的平均銷售額差不多;在第三方APP進行6-10次購買的顧客的平均銷售額差不多,大於在第三方APP進行了1-5次購買的顧客的平均銷售額。總銷售額大部分由從未在第三方APP購買過的用戶貢獻,其次是在第三方APP購買過10次的用戶,再次是在第三方APP進行了1-5次購買的顧客,貢獻最少的是在第三方APP進行6-10次購買的顧客。三、相關和可視化3.1類別型變量生成啞變量xhs.info()#將gender\lifecycle\engaged_last_30\生成啞變量xhs2=pd.get_dummies(xhs)xhs2.info()3.2計算revenue和其他變量之間的相關性sns.heatmap(xhs2.corr(),cmap='YlGnBu')lifecycle_C和days_since_last_order和3rd_party_stores兩兩正相關gender_0.0和engaged_last_30_0.0正相關revenue和其他任何變量之間的相關性都不明顯#僅查看所有變量與revenue的相關性,同時根據相關性做降序排列展示xhs2.corr()[['revenue']].sort_values('revenue',ascending=False)revenue和其他任何變量之間的相關性都不明顯和revenue正相關性最高的是days_since_last_order、previous_order_amount、engaged_last_30_1.0和revenue負相關性最高的是3rd_party_stores、engaged_last_30_0.03.3變量可視化分析對於revenue相關性較高的days_since_last_order、previous_order_amount、engaged_last_30_1.0、3rd_party_stores、engaged_last_30_0.0進行相關性可視化分析#對days_since_last_order變量進行線性關系可視化分析sns.regplot('days_since_last_order','revenue',xhs2,scatter_kws={'s':3})#對previous_order_amount變量進行線性關系可視化分析sns.regplot('previous_order_amount','revenue',xhs2,scatter_kws={'s':3})#對engaged_last_30_1.0變量進行線性關系可視化分析sns.regplot('engaged_last_30_1.0','revenue',xhs2,scatter_kws={'s':0.5})#對3rd_party_stores變量進行線性關系可視化分析sns.regplot('3rd_party_stores','revenue',xhs2,scatter_kws={'s':3})對於revenue相關性較弱的變量進行相關性可視化分析#對age變量進行線性關系可視化分析sns.regplot('age','revenue',xhs2,scatter_kws={'s':3})#對lifecycle_C變量進行線性關系可視化分析sns.regplot('lifecycle_C','revenue',xhs2,scatter_kws={'s':0.01})四、回歸模型4.1模型建立#調用sklearn中的線性回歸工具包fromsklearn.linear_modelimportLinearRegression#LinearRegression()設置模型為線性回歸model=LinearRegression()#設定自變量和因變量y=xhs2['revenue']x=xhs2[['previous_order_amount','engaged_last_30_1.0','days_since_last_order']]model.fit(x,y)#查看自變量系數model.coef_#查看截距model.intercept_4.2模型評估score=model.score(x,y)#x和y打分scorepredictions=model.predict(x)#計算y預測值error=predictions-y#計算誤差rmse=(error**2).mean()**.5#計算rmsemae=abs(error).mean()#計算maeprint(rmse)print(mae)rmse=260.5mae=205MAE(MeanAbsoluteError)絕對平均誤差,是絕對誤差的平均值把每個數據點的預測值和真實值相見,將所有數據點加總求平均可以更好地反映預測值誤差的實際情況RMSE(RootMeanSquareError)均方根誤差,將每個數據點的誤差取平方後開方RMSE比起MAE放大了誤差,對誤差的懲罰更重常用來作為機器學習模型預測結果衡量的標準#查看標準的模型輸出表fromstatsmodels.formula.apiimportolsmodel=ols('y~x',xhs2).fit()print(model.summary())R-squared僅為0.031Prob為0該回歸基本無意義4.3模型優化優化思路1:分組後轉換為啞變量將days_since_last_order分組bins1=[0,12,24]#創建分組labels1=['<12','>=12']xhs2['days_since_last_order_new']=pd.cut(xhs2['days_since_last_order'],bins1,right=False,labels=labels1)xhs2.groupby(['days_since_last_order_new'])['revenue'].describe()days_since_last_order<12和days_since_last_order>=12的銷售額平均值存在明顯區別,分布為245和317#僅查看所有變量與revenue的相關性,同時根據相關性做降序排列展示xhs2.corr()[['revenue']].sort_values('revenue',ascending=False)days_since_last_order_new_>=12和revenue相關性較高,為0.116將days_since_last_order_new_>=12納入自變量:#LinearRegression()設置模型為線性回歸model=LinearRegression()#設定自變量和因變量y=xhs2['revenue']x=xhs2[['previous_order_amount','engaged_last_30_1.0','days_since_last_order','days_since_last_order_new_>=12']]model.fit(x,y)score=model.score(x,y)#x和y打分scorepredictions=model.predict(x)#計算y預測值error=predictions-y#計算誤差rmse=(error**2).mean()**.5#計算rmsemae=abs(error).mean()#計算maeprint(rmse)print(mae)添加了'days_since_last_order_new_>=12'自變量,score:0.030-0.031將age分組bins2=[14,20,29,30,35,40,45]#創建分組labels2=['<20','<29','<30','<35','<40','<45']xhs2['age_new']=pd.cut(xhs2['age'],bins2,right=False,labels=labels2)xhs2.groupby(['age_new'])['revenue'].describe()#查看age_new中age的分布xhs2=pd.get_dummies(xhs2)#僅查看所有變量與revenue的相關性,同時根據相關性做降序排列展示xhs2.corr()[['revenue']].sort_values('revenue',ascending=False)將age_new_<30納入自變量:#調用sklearn中的線性回歸工具包fromsklearn.linear_modelimportLinearRegression#LinearRegression()設置模型為線性回歸model=LinearRegression()#設定自變量和因變量y=xhs2['revenue']x=xhs2[['previous_order_amount','engaged_last_30_1.0','days_since_last_order','age_new_<30']]model.fit(x,y)score=model.score(x,y)#x和y打分scorepredictions=model.predict(x)#計算y預測值error=