招行數字金融挑戰賽數據賽道賽題一

賽題描述:根據提供的用戶行為數據,選手需要分析用戶行為特征與廣告內容的匹配關系,準確預測用戶對測試集廣告的點擊情況,通過AUC計算得分。

得分0.6120,排名60+。

嘗試了很多模型都沒有能夠提升效果,好奇大佬的代碼是咋寫的。

分享一下思路:

特征處理

時間特征是大多數廣告點擊預測任務中的核心因素。用戶在不同時間段的行為差別較大(比如:晚上適合網易云)。
從曝光時間中提取出了,week,hour,hour_m,cos_hour,day_of_week特征,將一天劃分成了四個時間段:早上、下午、晚上、夜晚,增加了一個工作時間的判斷。

data['exposure_time'] = pd.to_datetime(data['exposure_time'])
data['week'] = data['exposure_time'].dt.isocalendar().week
data['hour'] = data['exposure_time'].dt.hour
data['hour_m'] = data['hour'] + data['exposure_time'].dt.minute / 60
data['cos_hour'] = np.cos(2 * np.pi * data['hour_m'] / 24)
data['day_of_week'] = data['exposure_time'].dt.dayofweekdef get_time_period(hour):if 6 <= hour < 12:return 'morning'elif 12 <= hour < 18:return 'afternoon'elif 18 <= hour < 24:return 'evening'else:return 'night'
data['time_period'] = data['hour'].apply(get_time_period)
data['is_work_time'] = data['hour'].apply(lambda x: 1 if 9 <= x < 17 else 0)

除此之外,增添了兩個新的特征。
purchase_efficiency:購買效率。
ad_quality_score:廣告質量。

data['purchase_efficiency'] = data['purchase_history'] / (data['activity_score'] + 1e-6)
data['ad_quality_score'] = data['advertiser_score'] * data['historical_ctr']

并對職業、地區、廣告類型等數據使用了LabelEncoder 編碼。

label_encoders = {}
for col in ['occupation', 'category', 'material_type', 'region', 'device', 'time_period']:le = LabelEncoder()data[col] = le.fit_transform(data[col])label_encoders[col] = le

對于職業、地區、設備等數據就行了頻率編碼,捕捉類別的熱門程度。

data['purchase_efficiency'] = data['purchase_history'] / (data['activity_score'] + 1e-6)
data['ad_quality_score'] = data['advertiser_score'] * data['historical_ctr']

創建了三個交互特征:職業-廣告類型,設備-廣告類型,地區-商品材質。

data['occupation_category'] = data['occupation'].astype(str) + '_' + data['category'].astype(str)
data['region_material_type'] = data['region'].astype(str) + '_' + data['material_type'].astype(str)
data['device_category'] = data['device'].astype(str) + '_' + data['category'].astype(str)

purchase_history,activity_score進行分箱,減少對異常值的敏感。

bins_purchase = [0, 1, 5, 10, 20, 50, 100]
labels_purchase = [0, 1, 2, 3, 4, 5]
data['purchase_history_bin'] = pd.cut(data['purchase_history'], bins=bins_purchase, labels=labels_purchase, include_lowest=True)bins_activity = [0, 10, 20, 30, 40, 50, 100]
labels_activity = [0, 1, 2, 3, 4, 5]
data['activity_score_bin'] = pd.cut(data['activity_score'], bins=bins_activity, labels=labels_activity, include_lowest=True)
模型參數設置

使用LightGBM模型進行訓練。

params = {'boosting_type': 'gbdt','objective': 'binary','metric': 'auc','num_leaves': 63,'learning_rate': 0.01,'feature_fraction': 0.8,'bagging_fraction': 0.8,'bagging_freq': 5,'verbose': -1,'n_estimators': 5000,'n_jobs': -1
}

使用 StratifiedKFold 進行交叉驗證,保證每個折中的正負樣本比例相似。每個折內,我們訓練一個LightGBM模型,并計算每個折的AUC。

skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=42)
oof_preds = np.zeros(len(df_train))
test_preds = np.zeros(len(df_test))
auc_scores = []for fold, (train_idx, val_idx) in enumerate(skf.split(df_train, df_train[label])):X, X_val = df_train[feats].iloc[train_idx], df_train[feats].iloc[val_idx]y, y_val = df_train[label].iloc[train_idx], df_train[label].iloc[val_idx]model = LGBMClassifier(**params)model.fit(X, y, eval_set=[(X_val, y_val)], early_stopping_rounds=100, verbose=200)val_pred = model.predict_proba(X_val)[:, 1]auc = roc_auc_score(y_val, val_pred)auc_scores.append(auc)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79462.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ORB-SLAM3和VINS-MONO的對比

直接給總結&#xff0c;整體上orbslam3&#xff08;僅考慮帶imu&#xff09;在初始化階段是松耦合&#xff0c;localmap和全局地圖優化是緊耦合。而vins mono則是全程緊耦合。然后兩者最大的區別就在于vins mono其實沒有對地圖點進行優化&#xff0c;為了輕量化&#xff0c;它一…

安裝typescript時,npm install -g typescript報錯

刪除C:\Users\用戶\下的.npmrc文件,如果你的沒有&#xff0c;看是不是因為將隱藏的項目勾選上了&#xff0c;然后去掉勾選。 重新輸入

[GESP202503 四級] 二階矩陣c++

題目描述 小 A 有一個 n 行 m 列的矩陣 A。 小 A 認為一個 22 的矩陣 D 是好的&#xff0c;當且僅當 。其中 表示矩陣 D 的第 i 行第 j 列的元素。 小 A 想知道 A 中有多少個好的子矩陣。 輸入 第一行&#xff0c;兩個正整數 n,m。 接下來 n 行&#xff0c;每行 m 個整數…

基于flask+pandas+csv的報表實現

基于大模型根據提示詞去寫SQL執行SQL返回結果輸出報表技術上可行的&#xff0c;但為啥還要基于pandas去實現呢&#xff1f; 原因有以下幾點&#xff1a; 1、大模型無法滿足實時性輸出報表的需求&#xff1b; 2、使用大模型比較適合數據量比較大的場景&#xff0c;大模型主要…

Java學習筆記(對象)

一、對象本質 狀態&#xff08;State&#xff09;&#xff1a;通過成員變量&#xff08;Field&#xff09;描述 行為&#xff08;Behavior&#xff09;&#xff1a;通過成員方法&#xff08;Method&#xff09;實現 class Person {String name;int age;void eat() {System.o…

Qt學習Day0:Qt簡介

0. 關于Qt Qt是C的實踐課&#xff0c;之前在C中學習的語法可以有具體的應用場景。Qt的代碼量很大&#xff0c;不要死記硬背&#xff0c;學會查詢文檔的能力更加重要。 建議提升一下相關單詞的儲備量&#xff1a; 1. Qt是什么&#xff1f; Qt是一個基于C語言的圖形用戶界面&a…

React知識框架

一、核心概念 1. 組件化開發 核心思想&#xff1a;將 UI 拆分為獨立、可復用的組件&#xff08;函數組件/類組件&#xff09;。組件特性&#xff1a;props&#xff08;接收參數&#xff09;、state&#xff08;組件狀態&#xff09;、生命周期&#xff08;類組件特有&#xf…

Django之賬號登錄及權限管理

賬號登錄及權限管理 目錄 1.登錄功能 2.退出登錄 3.權限管理 4.代碼展示合集 這篇文章, 會講到如何實現賬號登錄。賬號就是我們上一篇文章寫的賬號管理功能, 就使用那里面已經創建好的賬號。這一次登錄, 我們分為三種角色, 分別是員工, 領導, 管理員。不同的角色, 登錄進去…

[學習]RTKLib詳解:convkml.c、convrnx.c與geoid.c

本文是 RTKLlib詳解 系列文章的一篇&#xff0c;目前該系列文章還在持續總結寫作中&#xff0c;以發表的如下&#xff0c;有興趣的可以翻閱。 [學習] RTKlib詳解&#xff1a;功能、工具與源碼結構解析 [學習]RTKLib詳解&#xff1a;pntpos.c與postpos.c [學習]RTKLib詳解&…

java 破解aspose.words 18.6 使用

資源包&#xff1a;https://download.csdn.net/download/qq_36598111/90787167 jar包是破解過的&#xff0c;直接可以使用。 引入jar&#xff0c;要引入本地的&#xff0c;不要直接引入倉庫的 <dependency><groupId>com.aspose</groupId><artifactId>…

vue使用rules實現表單校驗——校驗用戶名和密碼

編寫校驗規則 常規校驗 const rules {username: [{ required: true, message: 請輸入用戶名, trigger: blur },{ min: 5, max: 16, message: 長度在 5 到 16 個字符, trigger: blur }],password: [{ required: true, message: 請輸入密碼, trigger: blur },{ min: 5, max: 1…

寶塔服務安裝使用的保姆級教程

寶塔介紹&#xff1a; 寶塔面板&#xff08;BT Panel&#xff09; 是一款 國產的服務器運維管理面板&#xff0c;主要用于簡化 Linux/Windows 服務器的網站、數據庫、FTP、防火墻等管理操作。它通過圖形化界面&#xff08;Web端&#xff09;和命令行工具&#xff08;bt 命令&a…

數字化轉型-4A架構之數據架構

4A架構系列文章 數字化轉型-4A架構&#xff08;業務架構、應用架構、數據架構、技術架構&#xff09; 數字化轉型-4A架構之業務架構 數字化轉型-4A架構之應用架構 數字化轉型-4A架構之數據架構 數字化轉型-4A架構之技術架構 數據架構 Data Architecture&#xff08;DA&…

每日腳本 5.11 - 進制轉換和ascii字符

前置知識 python中各個進制的開頭 二進制 &#xff1a; 0b 八進制 &#xff1a; 0o 十六進制 : 0x 進制轉換函數 &#xff1a; bin() 轉為2進制 oct() 轉換為八進制的函數 hex() 轉換為16進制的函數 ascii碼和字符之間的轉換 &#xff1a; chr(97) 碼轉為字符 …

Vulnhub Lazysysadmin靶機攻擊實戰(一)

導語 ??靶機下載地址 https://download.vulnhub.com/lazysysadmin/Lazysysadmin.zip ??靶機信息地址 https://www.vulnhub.com/entry/lazysysadmin-1,205/ 文章目錄 信息收集掃描路徑提權其他思路探索其他方式找密碼總結下載安裝好靶機之后啟動虛擬機如下所示。 信息收集 我…

【DB2】DB2啟動失敗報錯SQL1042C

在本地某次啟動db2時報錯SQL1042C&#xff0c;具體報錯如下 [db2inst1standby ~]$ db2start 05/07/2025 16:32:53 0 0 SQL1042C An unexpected system error occurred. SQL1032N No start database manager command was issued. SQLSTATE57019在網上百度到說是需要…

Python中的re庫詳細用法與代碼解析

目錄 1. 前言 2. 正則表達式的基本概念 2.1 什么是正則表達式&#xff1f; 2.2 常用元字符 3. re庫的適應場景 3.1 驗證用戶輸入 3.2 從文本中提取信息 3.3 文本替換與格式化 3.4 分割復雜字符串 3.5 數據清洗與預處理 4. re庫的核心功能詳解 4.1 re.match()&#…

藍橋杯2025年第十六屆省賽真題-水質檢測

C語言代碼&#xff1a; #include <stdio.h> #include <string.h>#define MAX_LEN 1000000int main() {char a[MAX_LEN 1], b[MAX_LEN 1];// 使用 scanf 讀取字符數組scanf("%s", a);scanf("%s", b);int ans 0;int pre -1;int state -1;i…

65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 創建 3D 圖形

65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 創建 3D 圖形 實現效果 在該案例中&#xff0c;Three.js 被用來創建一個包含多個 3D 對象的場景。其中包括&#xff1a; 圓環結&#xff08;TorusKnot&#xff09;立方體&#xff08;Box&#xff09;球體&…

Python學習筆記--Django的安裝和簡單使用(一)

一.簡介 Django 是一個用于構建 Web 應用程序的高級 Python Web 框架。Django 提供了一套強大的工具和約定&#xff0c;使得開發者能夠快速構建功能齊全且易于維護的網站。Django 遵守 BSD 版權&#xff0c;初次發布于 2005 年 7 月, 并于 2008 年 9 月發布了第一個正式版本 1…