kaggle(04)---avazu_ctr_predictor(baseline)

比賽的目的:

  • 通過分析網上的系統日志和用戶行為信息,來預測某些網頁上項目的點擊率。
  • 是一個二分類的問題,只需要預測出用戶是否點擊即可
  • 最好能夠輸出某個概率,比如:用戶點擊某個廣告的概率。
    比賽官網

文件信息:

train - Training set. 10 days of click-through data, ordered chronologically. Non-clicks and clicks are subsampled according to different strategies.

test - Test set. 1 day of ads to for testing your model predictions.

sampleSubmission.csv - Sample submission file in the correct format, corresponds to the All-0.5 Benchmark.

屬性信息:

  • id: ad identifier
  • click: 0/1 for non-click/click
  • hour: format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC.
  • C1 – anonymized categorical variable
  • banner_pos
  • site_id
  • site_domain
  • site_category
  • app_id
  • app_domain
  • app_category
  • device_id
  • device_ip
  • device_model
  • device_type
  • device_conn_type
  • C14-C21 – anonymized categorical variables

初步分析:

  • 這是一個點擊率預測的問題,是一個二分類的問題
  • 通過初步查看給出的屬性,主要分為用戶,網站,廣告和時間四種類型的屬性
  • 時間應該是一個重要的屬性,可以好好分析,因為每個人在不同時間喜歡看不同的東西
  • 網站類型也是一個和用戶相關性比較大的屬性
  • 設備類型可以反映出用戶的一個經濟范圍和消費水平
  • 等等!肯定還有很多相關性在這些屬性中,我們應該設身處地的思考這些問題。

Load Data

import pandas as pd# Initial setup
train_filename = "train_small.csv"  #由于原始數據量比較多,所以這里先導入一個經過下采樣的樣本
test_filename = "test.csv"
submission_filename = "submit.csv"training_set = pd.read_csv(train_filename)

Explore Data

training_set.shape
(99999, 24)
#我們首先看看數據的樣子
training_set.head(10)
idclickhourC1banner_possite_idsite_domainsite_categoryapp_idapp_domain...device_typedevice_conn_typeC14C15C16C17C18C19C20C21
01.000009e+18014102100100501fbe01fef384576728905ebdecad23867801e8d9...1215706320501722035-179
11.000017e+19014102100100501fbe01fef384576728905ebdecad23867801e8d9...101570432050172203510008479
21.000037e+19014102100100501fbe01fef384576728905ebdecad23867801e8d9...101570432050172203510008479
31.000064e+19014102100100501fbe01fef384576728905ebdecad23867801e8d9...101570632050172203510008479
41.000068e+1901410210010051fe8cc4489166c1610569f928ecad23867801e8d9...1018993320502161035-1157
51.000072e+1901410210010050d6137915bb1ef334f028772becad23867801e8d9...10169203205018990431100077117
61.000072e+19014102100100508fda644b25d4cfcdf028772becad23867801e8d9...1020362320502333039-1157
71.000092e+1901410210010051e151e2457e091613f028772becad23867801e8d9...1020632320502374339-123
81.000095e+19114102100100501fbe01fef384576728905ebdecad23867801e8d9...1215707320501722035-179
91.000126e+190141021001002084c7ba46c4e18dd650e219e0ecad23867801e8d9...0021689320502496316710019123

10 rows × 24 columns

  • 目前主要有22個屬性,其中有很多是類別的屬性。
  • 訓練集總共有99999個樣本,還行,不多也不少。
training_set.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 99999 entries, 0 to 99998
Data columns (total 24 columns):
id                  99999 non-null float64
click               99999 non-null int64
hour                99999 non-null int64
C1                  99999 non-null int64
banner_pos          99999 non-null int64
site_id             99999 non-null object
site_domain         99999 non-null object
site_category       99999 non-null object
app_id              99999 non-null object
app_domain          99999 non-null object
app_category        99999 non-null object
device_id           99999 non-null object
device_ip           99999 non-null object
device_model        99999 non-null object
device_type         99999 non-null int64
device_conn_type    99999 non-null int64
C14                 99999 non-null int64
C15                 99999 non-null int64
C16                 99999 non-null int64
C17                 99999 non-null int64
C18                 99999 non-null int64
C19                 99999 non-null int64
C20                 99999 non-null int64
C21                 99999 non-null int64
dtypes: float64(1), int64(14), object(9)
memory usage: 18.3+ MB
  • 因為是處理好的,所以數據比較完整,沒有缺失值,這為我們省去很多的工作
  • 數據中很多屬性是類別的,需要進行編碼處理
  • 數值型的數據取值都是int64,但是還是需要看看數據范圍是否一致,不然還要歸一化處理。
  • 接下來看一下數值型的數據的一個分布情況
#查看訓練集
training_set.describe()
idclickhourC1banner_posdevice_typedevice_conn_typeC14C15C16C17C18C19C20C21
count9.999900e+0499999.00000099999.099999.00000099999.00000099999.00000099999.00000099999.00000099999.00000099999.00000099999.00000099999.00000099999.00000099999.00000099999.000000
mean9.500834e+180.17490214102100.01005.0344400.1983021.0557410.19927217682.106071318.33394356.8189881964.0290900.789328131.73544737874.60636688.555386
std5.669435e+180.3798850.01.0887050.4026410.5839860.6352713237.72695611.93199836.924283394.9611291.223747244.07781648546.36929945.482979
min3.237563e+130.00000014102100.01001.0000000.0000000.0000000.000000375.000000120.00000020.000000112.0000000.00000033.000000-1.00000013.000000
25%4.183306e+180.00000014102100.01005.0000000.0000001.0000000.00000015704.000000320.00000050.0000001722.0000000.00000035.000000-1.00000061.000000
50%1.074496e+190.00000014102100.01005.0000000.0000001.0000000.00000017654.000000320.00000050.0000001993.0000000.00000035.000000-1.00000079.000000
75%1.457544e+190.00000014102100.01005.0000000.0000001.0000000.00000020362.000000320.00000050.0000002306.0000002.00000039.000000100083.000000156.000000
max1.844670e+191.00000014102100.01010.0000005.0000005.0000005.00000021705.000000728.000000480.0000002497.0000003.0000001835.000000100248.000000157.000000
  • 數值型數據取值范圍相差較大,后面需要對其進行歸一化處理。
# id: ad identifier
# click: 0/1 for non-click/click
# hour: format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC.
# C1 -- anonymized categorical variable
# banner_pos
# site_id
# site_domain
# site_category
# app_id
# app_domain
# app_category
# device_id
# device_ip
# device_model
# device_type
# device_conn_type
# C14-C21 -- anonymized categorical variables
from sklearn.externals import joblib
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metricsfrom utils import load_df
E:\Anaconda2\soft\lib\site-packages\sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20."This module will be removed in 0.20.", DeprecationWarning)
# 結果衡量
def print_metrics(true_values, predicted_values):print "Accuracy: ", metrics.accuracy_score(true_values, predicted_values)print "AUC: ", metrics.roc_auc_score(true_values, predicted_values)print "Confusion Matrix: ", + metrics.confusion_matrix(true_values, predicted_values)print metrics.classification_report(true_values, predicted_values)# 擬合分類器
def classify(classifier_class, train_input, train_targets):classifier_object = classifier_class()classifier_object.fit(train_input, train_targets)return classifier_object# 模型存儲
def save_model(clf):joblib.dump(clf, 'classifier.pkl')
train_data = load_df('train_small.csv').values
train_data.shape #數據量還是99999個
(99999L, 14L)
train_data[:,:]
array([[       0, 14102100,     1005, ...,       35,       -1,       79],[       0, 14102100,     1005, ...,       35,   100084,       79],[       0, 14102100,     1005, ...,       35,   100084,       79],...,[       0, 14102100,     1005, ...,       35,       -1,       79],[       1, 14102100,     1005, ...,       35,       -1,       79],[       0, 14102100,     1005, ...,       35,       -1,       79]],dtype=int64)

先訓練一個baseline看看,說起baseline當然選用工業界認同的baseline模型LR

# 訓練和存儲模型
X_train, X_test, y_train, y_test = train_test_split(train_data[0::, 1::], train_data[0::, 0],test_size=0.3, random_state=0)classifier = classify(LogisticRegression, X_train, y_train) #使用LR模型
predictions = classifier.predict(X_test)
print_metrics(y_test, predictions)  #通過多種評價指標對分類的模型進行評判
save_model(classifier)  #保存模型
Accuracy:  0.8233
AUC:  0.5
Confusion Matrix:  [[24699     0][ 5301     0]]precision    recall  f1-score   support0       0.82      1.00      0.90     246991       0.00      0.00      0.00      5301avg / total       0.68      0.82      0.74     30000E:\Anaconda2\soft\lib\site-packages\sklearn\metrics\classification.py:1135: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.'precision', 'predicted', average, warn_for)

從baseline的結果,我們可以得出如下幾點結論:

  • 將結果全部預測為沒有點擊后的準確率可以達到82.33%,這顯然是不對的
  • 從混淆矩陣可以看出原本為點擊的結果全部預測為了不點擊,猜想的原因可能是樣布不均衡問題導致的。因為畢竟廣告點擊的較少,數據中大部分的數據的標簽都是沒有點擊的,這會導致模型偏向于去預測不點擊
  • 從實驗結果可以發現準確率有時候非常不準,對于模型的狀態預判。
#樣本中未點擊的樣本數占總體樣本的83%多,這和我們分析的原因是一樣的,樣本非常不均衡。
training_set[training_set["click"] == 0].count()[0] * 1.0  / training_set.shape[0]
0.8250982509825098
# 按照指定的格式生成結果
def create_submission(ids, predictions, filename='submission.csv'):submissions = np.concatenate((ids.reshape(len(ids), 1), predictions.reshape(len(predictions), 1)), axis=1)df = DataFrame(submissions)df.to_csv(filename, header=['id', 'click'], index=False)
import numpy as np
from pandas import DataFrameclassifier = joblib.load('classifier.pkl')
test_data_df = load_df('test.csv', training=False)
ids = test_data_df.values[0:, 0]
predictions = classifier.predict(test_data_df.values[0:, 1:])
create_submission(ids, predictions)

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

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

相關文章

一文讀懂機器學習庫graphLab

文章目錄目錄什么是graphlab為什么使用graphlab?如何安裝graphlab?graphlab的簡單使用。目錄 什么是graphlab GraphLab 是由CMU&#xff08;卡內基梅隆大學&#xff09;的Select 實驗室在2010 年提出的一個基于圖像處理模型的開源圖計算框架&#xff0c;框架使用C語言開發實…

《Head First設計模式》第七章-適配器模式、外觀模式

適配器模式 適配器模式是什么&#xff0c;你一定不難理解&#xff0c;因為現實中到處都是。比如說&#xff1a; 如果你需要在歐洲國家使用美國制造的筆記本電腦&#xff0c;你可能需要使用一個交流電的適配器…… 當你不想改變現有的代碼&#xff0c;解決接口不適配問題&#…

《Head First設計模式》第八章筆記-模板方法模式

模板方法模式 之前所學習的模式都是圍繞著封裝進行&#xff0c;如對象創建、方法調用、復雜接口的封裝等&#xff0c;這次的模板方法模式將深入封裝算法塊&#xff0c;好讓子類可以在任何時候都將自己掛接進運算里。 模板方法定義&#xff1a;模板方法模式在一個方法中定義一…

機器學習基礎-吳恩達-coursera-(第一周學習筆記)----Introduction and Linear Regression

課程網址&#xff1a;https://www.coursera.org/learn/machine-learning Week 1 —— Introduction and Linear Regression 目錄 Week 1 Introduction and Linear Regression目錄一 介紹1-1 機器學習概念及應用1-2 機器學習分類 二 單變量的線性回歸2-1 假設函數hypothesis2…

常見8種機器學習算法總結

簡介 機器學習算法太多了&#xff0c;分類、回歸、聚類、推薦、圖像識別領域等等&#xff0c;要想找到一個合適算法真的不容易&#xff0c;所以在實際應用中&#xff0c;我們一般都是采用啟發式學習方式來實驗。通常最開始我們都會選擇大家普遍認同的算法&#xff0c;諸如SVM&a…

redis——數據結構(字典、鏈表、字符串)

1 字符串 redis并未使用傳統的c語言字符串表示&#xff0c;它自己構建了一種簡單的動態字符串抽象類型。 在redis里&#xff0c;c語言字符串只會作為字符串字面量出現&#xff0c;用在無需修改的地方。 當需要一個可以被修改的字符串時&#xff0c;redis就會使用自己實現的S…

Hotspot虛擬機的對象

創建 Step1:類加載檢查 虛擬機遇到一條 new 指令時&#xff0c;首先將去檢查這個指令的參數是否能在常量池中定位到這個類的符號引用&#xff0c;并且檢查這個符號引用代表的類是否已被加載過、解析和初始化過。如果沒有&#xff0c;那必須先執行相應的類加載過程。 Step2:分…

劍指offer(刷題1-10)--c++,Python版本

文章目錄目錄第一題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;c順序查找二分查找Python第二題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第三題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;c使用棧輔助反轉鏈表python第四題&#xff…

redis——數據結構(整數集合,壓縮列表)

4、整數集合 整數集合&#xff08;intset&#xff09;是 Redis 用于保存整數值的集合抽象數據結構&#xff0c; 可以保存 int16_t 、 int32_t 、 int64_t 的整數值&#xff0c; 并且保證集合中不會出現重復元素。 實現較為簡單&#xff1a; typedef struct intset {// 編碼方…

原 劍指offer(刷題11-20)--c++,Python版本

文章目錄目錄第11題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第12題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第13 題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第 14題&#xff1a;解題思路&#xff1a;代碼實現&…

LRU介紹和實現

LRU全稱是Least Recently Used&#xff0c;即最近最久未使用的意思。 LRU算法的設計原則是&#xff1a;如果一個數據在最近一段時間沒有被訪問到&#xff0c;那么在將來它被訪問的可能性也很小。也就是說&#xff0c;當限定的空間已存滿數據時&#xff0c;應當把最久沒有被訪問…

機器學習知識總結系列- 知識圖譜(0-0)

文章目錄目錄機器學習知識圖譜目錄 本系列的文章只是根據個人的習慣進行總結&#xff0c;可能結構與一些書籍上不太一樣&#xff0c;開始的內容比較簡單&#xff0c;會隨著后續的深入&#xff0c;不斷豐富和更新圖譜&#xff0c;同時也期待有相同興趣的朋友一起給我留言一起豐富…

跳表介紹和實現

想慢慢的給大家自然的引入跳表。 想想&#xff0c;我們 1&#xff09;在有序數列里搜索一個數 2&#xff09;或者把一個數插入到正確的位置 都怎么做&#xff1f; 很簡單吧 對于第一個操作&#xff0c;我們可以一個一個比較&#xff0c;在數組中我們可以二分&#xff0c;這…

機器學習知識總結系列- 基本概念(1-0)

文章目錄目錄1. 機器學習的定義2. 機器學習的分類2.1根據是否在人類監督下進行訓練監督學習非監督學習半監督學習強化學習2.2根據是否可以動態漸進的學習在線學習批量學習2.3根據是否在訓練數據過程中進行模式識別實例學習基于模型的學習3. 機器學習中的一些常見名詞4. 機器學習…

劍指offer(刷題21-30)--c++,Python版本

文章目錄目錄第 21題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第22 題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第23 題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第24 題&#xff1a;解題思路&#xff1a;代碼實現…

redis——對象

剛寫了redis主要的數據結構&#xff1a; 動態字符串、雙端鏈表、字典、壓縮列表、整數集合、跳表等 redis肯定不能直接使用這些數據結構來實現數據庫&#xff0c;它用這些數據庫建立了一個對象系統&#xff0c;包含&#xff1a; 字符串對象、列表對象、哈希對象、集合對象、…

劍指offer(刷題31-40)--c++,Python版本

文章目錄目錄第31 題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第32題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第33題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第34題&#xff1a;解題思路&#xff1a;代碼實現&a…

redis——數據庫

redis服務器將所有數據庫都保存在redis/redisServer中&#xff0c;數組db存放所有數據庫&#xff0c;每一項是一個redisdb結構。dbnum代表數據庫數量。 客戶端有一個指針指向當前數據庫&#xff0c;可以切換&#xff0c;也就是移動指針。 鍵空間 現在稍微介紹一下redisdb結構…

劍指offer(刷題41-50)--c++,Python版本

文章目錄目錄第41題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第42題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第43題&#xff1a;解題思路&#xff1a;代碼實現&#xff1a;cpython第44題&#xff1a;解題思路&#xff1a;代碼實現&am…

redis——持久化

因為redis是內存數據庫&#xff0c;他把數據都存在內存里&#xff0c;所以要想辦法實現持久化功能。 RDB RDB持久化可以手動執行&#xff0c;也可以配置定期執行&#xff0c;可以把某個時間的數據狀態保存到RDB文件中&#xff0c;反之&#xff0c;我們可以用RDB文件還原數據庫…