日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

天猫复购预测训练赛技术报告

發布時間:2024/3/26 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天猫复购预测训练赛技术报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

天貓復購預測賽技術報告

小組成員:李xx、姚xx、黃xx、劉xx

github地址:https://github.com/2017403603/Data_mining

一、問題描述

1.1 問題背景

? 商家有時會在特定日期,例如Boxing-day,黑色星期五或是雙十一(11月11日)開展大型促銷活動或者發放優惠券以吸引消費者,然而很多被吸引來的買家都是一次性消費者,這些促銷活動可能對銷售業績的增長并沒有長遠幫助,因此為解決這個問題,商家需要識別出哪類消費者可以轉化為重復購買者。通過對這些潛在的忠誠客戶進行定位,商家可以大大降低促銷成本,提高投資回報率。

1.2 數據描述

? 現在給定四個數據文件,分別為訓練數據,測試數據,用戶畫像以及用戶歷史記錄。訓練數據提供緯度為用戶、商家,以及該用戶是否為該商家的重復購買者(即label)。用戶畫像數據集提供對應用戶id的年齡和性別信息;用戶歷史記錄提供用戶過去六個月在不同店鋪的多種活躍狀態以及點擊時間等;測試數據集為用戶和商家的組合,用以預測該用戶是否為該商家的重復購買者。

1.3 問題描述

? 根據給定的四個數據形式,在測試數據中給定了用戶id和商家id的組合,需要預測該名用戶在對應商家的重復購買概率值。

二、數據探索

2.1 加載數據集

train_data = pd.read_csv("../DataMining/data_format1/train_format1.csv") test_data = pd.read_csv("../DataMining/data_format1/test_format1.csv") user_info = pd.read_csv("../DataMining/data_format1/user_info_format1.csv") user_log = pd.read_csv("../DataMining/data_format1/user_log_format1.csv")

2.2 查看用戶畫像中年齡和性別缺失率

(user_info.shape[0] - user_info["age_range"].count())/user_info.shape[0] (user_info.shape[0] - user_info["gender"].count()) / user_info.shape[0]

? 其中年齡缺失率為0.52%,性別缺失率為1.5%。缺失比率較小,因此其對最終的分類結果影響較小。后面將直接將NaN(由-1代替)當作特征輸入進模型進行訓練和學習

2.3 查看用戶信息數據的缺失—用戶行為日志數據缺失

user_log.isna().sum()

? 用戶行為日志主要缺失特征為購買品牌的缺失,其他特征均無缺失。

2.4 查看用戶畫像和歷史記錄基本數據描述

user_info.describe()

? 用戶畫像的基本數據分析顯示用戶的平均年齡在30歲左右,且方差較大。且購買者的性別主要為女性。

user_log.describe()

2.5 查看樣本label比例

? 樣本不均衡,非重復購買者比例遠遠大于重復購買者,因此需要采取一定措施解決此類樣本不平衡問題

2.6 對top 5店鋪進行畫圖分析

train_data.merchant_id.value_counts().head(5) train_data_merchant["TOP5"]=train_data_merchant["merchant_id"].map(lambda x: 1 if x in[4044,3828,4173,1102,4976] else 0) train_data_merchant=train_data_merchant[train_data_merchant["TOP5"]==1] plt.figure(figsize=(8,6)) plt.title("Merchant VS Label")sax=sns.countplot("merchant_id",hue="label",data=train_data_merchant)

? 采用分布直方圖對前五名店鋪進行比例分析,可得前五名店鋪占據了接近一半的數據量,且重復購買的比例都遠遠小于非重復購買

2.7 對商家的重復購買比例進行繪圖分析

train_data.groupby(["merchant_id"])["label"].mean() merchant_repeat_buy=[rate for rate in train_data.groupby(["merchant_id"])["label"].mean() if rate<=1 and rate > 0] plt.figure(figsize=(8,4)) ax=plt.subplot(1,2,1) sns.distplot(merchant_repeat_buy,fit=stats.norm) ax=plt.subplot(1,2,2) res=stats.probplot(merchant_repeat_buy,plot=plt)

? 由于數據的特征維度并不具有連續性,無法使用插值法進行填補,并且空缺比率較小,因此我們直接將空缺數據視為一個特征,用-1填補并代表此類特征

三、特征工程

3.1 數據集合并

  • 將訓練集df_train和用戶基本信息user_info_format.csv合并得到df_train,合并依據是用戶user_id。

    df_train = pd.merge(df_train,user_info,on="user_id",how="left")
  • 將df_train和用戶行為日志user_log_format1.csv合并得到新的df_train,合并依據是用戶user_id和商家merchant_id。

    df_train = pd.merge(df_train,total_logs_temp,on=["user_id","merchant_id"],how="left")
  • 3.2 特征生成

  • 通過簡單合并生成特征

    • 每個用戶在每個商家交互過的商品總和(不分種類)。total_item_id
    • 每個用戶在每個商家交互過的商品種類總和。unique_item_id
    • 每個用戶在每個商家交互過的商品所屬品類總和total_cat_id
    • 每個用戶在每個商家交互過的天數總和。total_time_temp
    • 每個用戶在每個商家點擊次數總和。clicks
    • 每個用戶在每個商家加入購物車次數總和。shopping_cart
    • 每個用戶在每個商家購買商品次數總和。purchases
    • 每個用戶在每個商家收藏商品次數總和。favourites
  • 通過分析生成特征

    • 用戶每月使用次數

      month_temp=user_log.groupby(['user_id','month']).size().reset_index().rename(columns={0:'cnt'}) month_temp=pd.get_dummies(month_temp, columns=['month'],prefix='user_mcnt') for i in range(5,12):month_temp['user_mcnt_'+str(i)]=month_temp['cnt']*month_temp['user_mcnt_'+str(i)]month_temp=month_temp.groupby(['user_id']).sum().drop(['cnt'],axis=1).reset_index()

      ? 意義:用戶每月使用天貓的次數可以反映用戶行為在時間上的特征,用戶在一年中不同的月份的消費表現可能不同,例如在年尾,春節,“雙十一”等期間可能消費水平高一些,在夏冬兩季的消費水平可能會低一些,通過統計每月使用次數可以有效反映出這些特征。

    • 商家的特征

      temp = groups.size().reset_index().rename(columns={0:'merchantf1'}) matrix = matrix.merge(temp, on='merchant_id', how='left') temp = groups['user_id', 'item_id', 'cat_id', 'brand_id'].nunique().reset_index().rename(columns={'user_id':'merchantf2', 'item_id':'merchantf3', 'cat_id':'merchantf4', 'brand_id':'merchantf5'}) matrix = matrix.merge(temp, on='merchant_id', how='left') temp = groups['action_type'].value_counts().unstack().reset_index().rename(columns={0:'merchantf6', 1:'merchantf7', 2:'merchantf8', 3:'merchantf9'}) matrix = matrix.merge(temp, on='merchant_id', how='left')

      ? 商家售出的某個商品、品牌的數量,能夠反映某些商品或者品牌的受歡迎程度,一定程度上也可以導致顧客回購率。

    • 商家與用戶的綜合特征

      matrix['ratiof1'] = matrix['userf9']/matrix['userf7'] # 用戶購買點擊比matrix['ratiof2'] = matrix['merchantf8']/matrix['merchantf6'] # 商家購買點擊比

      ? 用戶點擊或者該商家被點擊最終轉化為顧客購買的比率能夠很好的反映物品的受歡迎程度

  • 四、候選模型簡介

  • 邏輯回歸[1](Logistic Regression,LR)是一種廣義線性回歸(Generalized Linear Model),在機器學習中是最常見的一種用于二分類的算法模型。
  • 決策樹[2](Decision Tree,DT)是一種基本的分類與回歸方法,本文主要討論分類決策樹,決策樹模型呈樹形結構,在分類問題中,表示基于特征對數據進行分類的過程。
  • 隨機森林[3](Random Forest,RF)指的是利用多棵決策樹對樣本進行訓練并預測的一種分類器,可回歸可分類,所以隨機森林是基于多顆決策樹的一種集成學習算法。
  • 梯度提升樹[4](Gradient Descent Decision Tree,GBDT),梯度提升樹是以 CART 作為基函數,采用加法模型和前向分步算法的一種梯度提升方法。
  • XGBoost[5]是陳天奇等人開發的一個開源機器學習項目,高效地實現了GBDT算法并進行了算法和工程上的許多改進,被廣泛應用在Kaggle競賽及其他許多機器學習競賽中并取得了不錯的成績。
  • 五、候選模型預測對比

    5.1 加載訓練數據和測試數據

    #讀取數據 df_train = pd.read_csv(r'df_train.csv') #加載最終測試數據 test_data= pd.read_csv(r'test_data.csv') test_data

    5.2 建模前預處理數據集

    #建模前預處理 y = df_train["label"] X = df_train.drop(["user_id", "merchant_id", "label"], axis=1) X.head(10) #分割數據 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=8)

    5.3 候選模型預測:邏輯回歸

    #logistic回歸 Logit = LogisticRegression(solver='liblinear') Logit.fit(X_train, y_train) Predict = Logit.predict(X_test) Predict_proba = Logit.predict_proba(X_test) print(Predict.shape) print(Predict[0:20]) print(Predict_proba[:]) Score = accuracy_score(y_test, Predict) Score

    #邏輯回歸最終結果獲取 Logit_Ans_Predict_proba = Logit.predict_proba(test_data) df_test['prob']=Logit_Ans_Predict_proba[:,1] #最終答案保存 df_test.to_csv("Logit_Ans.csv",index=None)

    ? 提交得到評分為:0.4564939

    5.4 候選模型預測:決策樹

    #決策樹 from sklearn.tree import DecisionTreeClassifier tree = DecisionTreeClassifier(max_depth=4,random_state=0) tree.fit(X_train, y_train) Predict_proba = tree.predict_proba(X_test) print(Predict_proba[:]) print("Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train))) print("Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))

    #決策樹最終結果獲取 Tree_Ans_Predict_proba = tree.predict_proba(test_data) df_test['prob']=Tree_Ans_Predict_proba[:,1] #最終答案保存 df_test.to_csv("Tree_Ans.csv",index=None)

    ? 提交得到評分為:0.5833852

    5.5 候選模型預測:隨機森林

    #隨機森林 from sklearn.ensemble import RandomForestClassifier rfc = RandomForestClassifier(n_estimators=50,random_state=90,max_depth=5) rfc = rfc.fit(X_train, y_train) Predict_proba = rfc.predict_proba(X_test) print(Predict_proba[:]) print("Accuracy on training set: {:.3f}".format(rfc.score(X_train, y_train))) print("Accuracy on test set: {:.3f}".format(rfc.score(X_test, y_test)))

    #隨機森林最終結果獲取 RFC_Ans_Predict_proba = rfc.predict_proba(test_data) df_test['prob']=RFC_Ans_Predict_proba[:,1] #最終答案保存 df_test.to_csv("RFC_Ans.csv",index=None)

    ? 提交得到評分為:0.6252815

    5.6 候選模型預測:隨機森林調參

    # 調參,繪制學習曲線來調參n_estimators(對隨機森林影響最大) score_lt = [] # 每隔10步建立一個隨機森林,獲得不同n_estimators的得分 for i in range(0,200,10):print("進度:",i)rfc = RandomForestClassifier(n_estimators=i+1,random_state=90,max_depth=8)rfc = rfc.fit(X_train, y_train)score = rfc.score(X_test, y_test)score_lt.append(score) score_max = max(score_lt) print('最大得分:{}'.format(score_max),'子樹數量為:{}'.format(score_lt.index(score_max)*10+1)) # 繪制學習曲線 x = np.arange(1,201,10) plt.subplot(111) plt.plot(x, score_lt, 'r-') plt.show()

    ? 上圖中橫坐標為參數n_estimators的值,縱坐標為模型在測試集上的準確率,每迭代一次n_estimators增加10,畫出每次迭代準確率的折線圖,由圖可知當n_estimators=100時隨機森林模型的效果最好,經調參后提交得到評分為:0.6256826。

    5.7 候選模型預測:XGboost

    import xgboost as xgb def xgb_train(X_train, y_train, X_valid, y_valid, verbose=True):model_xgb = xgb.XGBClassifier(max_depth=10, # raw8n_estimators=1000,min_child_weight=300, colsample_bytree=0.8, subsample=0.8, eta=0.3, seed=42 )model_xgb.fit(X_train, y_train,eval_metric='auc',eval_set=[(X_train, y_train), (X_valid, y_valid)],verbose=verbose,early_stopping_rounds=10 # 早停法,如果auc在10epoch沒有進步就stop)print(model_xgb.best_score)print("Accuracy on training set: {:.3f}".format(model.score(X_train, y_train))) print("Accuracy on test set: {:.3f}".format(model.score(X_test, y_test)))return model_xgb

    #XGboost最終結果獲取 model_xgb = xgb_train(X_train, y_train, X_valid, y_valid, verbose=False) prob = model_xgb.predict_proba(test_data) submission['prob'] = pd.Series(prob[:,1]) submission.drop(['origin'], axis=1, inplace=True) submission.to_csv('submission_xgb.csv', index=False)

    ? 提交得到評分為:0.6562986

    六、最終成績及排名

    小組成員:李xx、姚xx、黃xx、劉xx

    七、天貓復購預測總結

    ? 本次比賽最終成績和排名并不是很高,思考其原因主要還是在數據預處理和特征工程階段沒有做好,在數據集中,年齡和性別的缺失值差不多有九萬個,巨大的特征值數據缺失是預測準確率不高的主要原因之一,其次是特征工程,我們抽取特征的方法還是使用傳統的方法,相對比較簡單,這也是導致模型預測準確率不高的原因之一;在選用模型上我們使用了邏輯回歸、決策樹、隨機森林、Xgboost等熱門模型,訓練后這些模型在訓練集上的表現區別并不明顯,經比較Xgboost模型在測試集的效果最好,后期工作準備再重新做一下特征工程,在模型選取方面,計劃使用bagging集成多種分類算法的思想對模型進行改進,進一步提高預測準確率。

    八、參考

    [1] https://www.cnblogs.com/phyger/p/14188712.html

    [2] https://blog.csdn.net/qq_34807908/article/details/81539536

    [3] https://blog.csdn.net/lovenankai/article/details/99966142

    [4] https://www.jianshu.com/p/d1f696266814

    [5] http://cran.fhcrc.org/web/packages/xgboost/vignettes/xgboost.pdf

    總結

    以上是生活随笔為你收集整理的天猫复购预测训练赛技术报告的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 毛片高清免费 | 欧美午夜精品久久久 | 欧美视频在线观看一区二区 | 国产男女猛烈无遮挡a片漫画 | 中文字幕在线日亚洲9 | 色狠狠一区二区三区香蕉 | 日本黄色大片在线观看 | 好了av在线 | 日产精品久久久久久久蜜臀 | 97超碰免费在线观看 | 日本色中色 | 干极品美女 | 精品毛片一区二区三区 | 毛片www| 色8久久 | 能在线观看的av | 久久成人资源 | 午夜视频免费在线观看 | 91精品久久久久久久久久入口 | 超碰2020| 午夜影院网站 | 真实偷拍激情啪啪对白 | 成人自拍视频在线观看 | 性欧美在线视频观看 | 午夜播放 | 午夜精品久久久久久久久久久久 | 在厨房拨开内裤进入毛片 | 天天干视频在线观看 | 欧美人体做爰大胆视频 | 日本毛片视频 | 精品免费av | 国产在线视频你懂得 | 免费在线视频观看 | 国产老妇视频 | 亚洲精品字幕在线观看 | 外国一级片 | 男人干女人视频 | 日韩精品影院 | 一区二区三区免费在线观看视频 | 在线免费成人网 | 午夜日韩 | 午夜激情视频网 | 丁香六月婷婷综合 | 亚洲免费视频一区二区 | 国产精品无码av在线有声小说 | 男人插入女人下面的视频 | 精品一区二区三区无码视频 | 国产伦精品一区 | 免费的av在线 | 欧美日韩在线观看一区二区三区 | 国产一区二区三区在线视频观看 | 国产亚洲久久 | jizz色| 男女瑟瑟网站 | 亚洲av久久久噜噜噜噜 | 2019天天干天天操 | 国产精品69久久久久 | 欧美 日韩 精品 | 一区二区三区四区高清视频 | 裸体毛片| 亚洲视频图片 | 亚洲一区二区在线视频 | 天天综合中文字幕 | 色香欲综合网 | 97免费看| 麻豆视频传媒入口 | 毛片视频网站 | 欧美一区二区三区 | 二区免费视频 | 91精品国产综合久久国产大片 | 在线中文字幕亚洲 | 中文字字幕 | 亚洲成人av一区二区 | 非洲黑妞xxxxhd精品 | 麻豆久久久久久久久久 | 中文字幕在线观看免费高清 | 国产精品福利在线播放 | 极品久久久 | 国产精品无码电影在线观看 | 体内精视频xxxxx | 亚洲欧美一区二区三区不卡 | 精品人妻中文无码av在线 | 国产精品久久婷婷 | 欧美一区二区福利视频 | 日本肉体xxxx裸体137大胆图 | 亚洲综合自拍偷拍 | 成人黄色在线观看 | 牛牛精品一区二区 | sm久久捆绑调教精品一区 | 国产精品视频成人 | 国产无码日韩精品 | 日韩福利一区二区三区 | 亚洲激情另类 | 两根大肉大捧一进一出好爽视频 | 国产露脸无套对白在线播放 | 3d动漫啪啪精品一区二区中文字幕 | 蜜臀在线一区二区三区 | 一个色综合网 | 欧美成欧美va |