賽題的比賽背景:
隨着移動設備的完善和普及,移動互聯網+各行各業進入了高速發展階段,這其中以O2O(Online to Offline)消費最爲吸引眼球。據不完全統計,O2O行業估值上億的創業公司至少有10家,也不乏百億巨頭的身影。O2O行業天然關聯數億消費者,各類APP每天記錄了超過百億條用戶行爲和位置記錄,因而成爲大數據科研和商業化運營的最佳結合點之一。 以優惠券盤活老用戶或吸引新客戶進店消費是O2O的一種重要營銷方式。然而隨機投放的優惠券對多數用戶造成無意義的干擾。對商家而言,濫發的優惠券可能降低品牌聲譽,同時難以估算營銷成本。 個性化投放是提高優惠券覈銷率的重要技術,它可以讓具有一定偏好的消費者得到真正的實惠,同時賦予商家更強的營銷能力。本次大賽爲參賽選手提供了O2O場景相關的豐富數據,希望參賽選手通過分析建模,精準預測用戶是否會在規定時間內使用相應優惠券。
數據:
本賽題提供用戶在2016年1月1日至2016年6月30日之間真實線上線下消費行爲,預測用戶在2016年7月領取優惠券後15天以內的使用情況。
注意: 爲了保護用戶和商家的隱私,所有數據均作匿名處理,同時採用了有偏採樣和必要過濾。
評價方式
本賽題目標是預測投放的優惠券是否覈銷。針對此任務及一些相關背景知識,使用優惠券覈銷預測的平均AUC(ROC曲線下面積)作爲評價標準。 即對每個優惠券coupon_id單獨計算覈銷預測的AUC值,再對所有優惠券的AUC值求平均作爲最終的評價標準
提交結果:
一、SGD 分類
def check_model_SGD(data, predictors):
classifier = lambda: SGDClassifier(
loss='log', # loss function: logistic regression
penalty='elasticnet', # L1 & L2
fit_intercept=True, # 是否存在截距,默認存在
max_iter=100,
shuffle=True, # Whether or not the training data should be shuffled after each epoch
n_jobs=1, # The number of processors to use
class_weight=None) # Weights associated with classes. If not given, all classes are supposed to have weight one.
# 管道機制使得參數集在新數據集(比如測試集)上的重複使用,管道機制實現了對全部步驟的流式化封裝和管理。
# 可參考:https://blog.csdn.net/lanchunhui/article/details/50521648
model = Pipeline(steps=[
('ss', StandardScaler()), # transformer# 去均值和方差歸一化
('en', classifier()) # estimator
])
parameters = {
'en__alpha': [ 0.001, 0.01, 0.1],
'en__l1_ratio': [ 0.001, 0.01, 0.1]
}
# StratifiedKFold用法類似Kfold,但是他是分層採樣,確保訓練集,測試集中各類別樣本的比例與原始數據集中相同。
folder = StratifiedKFold(n_splits=3, shuffle=True)
# Exhaustive search over specified parameter values for an estimator.
#參考:https://blog.csdn.net/qq_39521554/article/details/86227582
grid_search = GridSearchCV(
model,
parameters,
cv=folder,
n_jobs=-1, # -1 means using all processors
verbose=1)
grid_search = grid_search.fit(data[predictors],
data['label'])
return grid_search