百天計劃之第30天,關(guān)于“AI量化投資,財富自由與個人成長”。
30天是第一個小里程碑,不知不覺日更30天,而且扎實在進(jìn)步。
那天有朋友問我,為何為自己搞一個量化框架,使用別人的東西,總覺得有各種限制。
這種感覺我之前也有用,而且試圖把qlib給拆了,就使用它的部分。
仔細(xì)想來,之前其實是我們沒有沉下心來去了解它,其實qlib畢竟經(jīng)過這么多高手,這么長時間的努力,我們自己造輪子很難超越——而且也沒有必要。
如果對一個東西沒有深度理解,自然會感覺諸多限制,打好基礎(chǔ),正所謂——磨刀不誤砍柴功。
01 集成樹模型之lightGBM
這是微軟開源的“輕量級梯度提升樹”。
項目在https://github.com/microsoft/LightGBM開源。
文檔地址:https://lightgbm.readthedocs.io/en/v3.3.2/
最新版本3.3.2。
python安裝比較簡單:
pip install lightgbm
它的介紹里強(qiáng)調(diào)它:
訓(xùn)練速度快,低內(nèi)存使用,更高的精度。
平行與分布式訓(xùn)練,支持GPU,能處理大規(guī)模數(shù)據(jù)。
lightGBM支持csv格式,numpy/pandas的ndarray,dataframe格式,還有l(wèi)ightGBM自有格式。其實支持csv和datafram已經(jīng)滿足我們大部分場景的使用。
官方給出了如下的數(shù)據(jù)集,并以xgboost作為benchmark:
Kaggle上的比賽有一半以上的冠軍方案都是基于GBDT,LightGBM提出的主要原因就是為了解決GBDT在海量數(shù)據(jù)遇到的問題,讓GBDT可以更好更快地用于工業(yè)實踐。
02 實戰(zhàn)一下
sklearn內(nèi)置了一些數(shù)據(jù)集,最簡單的當(dāng)數(shù)iris。
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris = datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3)
iris是一個dict, 有data和label兩個numpy的ndarray。
使用train_test_split可以把 iris.data按7:3比例分成兩份。
qlib提供的gbdt的版本使用的是LGB原生接口(LGB也提供了兼容sklearn的格式)。
# 轉(zhuǎn)換為Dataset數(shù)據(jù)格式
train_data = lgb.Dataset(X_train, label=y_train)
validation_data = lgb.Dataset(X_test, label=y_test)
# 參數(shù)
params = {
'learning_rate': 0.1,
'lambda_l1': 0.1,
'lambda_l2': 0.2,
'max_depth': 4,
'objective': 'multiclass', # 目標(biāo)函數(shù)
'num_class': 3,
}
# 模型訓(xùn)練
gbm = lgb.train(params, train_data, valid_sets=[validation_data])
# 模型存儲
joblib.dump(gbm, 'iris_model.pkl')
# 模型加載
gbm = joblib.load('iris_model.pkl')
# 模型預(yù)測
y_pred = gbm.predict(X_test,)
y_pred = [list(x).index(max(x)) for x in y_pred]
print(y_pred)
# 模型評估
print(accuracy_score(y_test, y_pred))
樹模型同sklearn類似,使用都比較簡單。
這里有幾個重要問題:
怎么評價現(xiàn)在模型好還是不好?
如何優(yōu)化?——包括數(shù)據(jù)預(yù)處理,特征工程,超參數(shù)。
03 kaggle信用卡忠誠度分析
還是得用打比賽的思路來學(xué)習(xí),我們看一個真實的案例——kaggle信用卡忠誠度分析。
比賽地址如下:
Elo Merchant Category Recommendation | Kaggle
數(shù)據(jù)的背景信息:
Elo是巴西最大的支付品牌,它用大量的用戶信用卡信息,并與商家達(dá)成很多合作。通過機(jī)器學(xué)習(xí)算法,為用戶推薦個性化的商品,以期達(dá)到商家,用戶利益最大化。
登錄kaggle后,下載數(shù)據(jù),解壓后得到8個文件:
train.csv, test.csv分別是訓(xùn)練集和測試集。
數(shù)據(jù)比較簡單,card_id就是信用卡號,用三個特征,首次激活的日期。
test的數(shù)據(jù)格式是一樣的。
historical_transactions是信用卡近三個月的交易清單。
merchants是所有商家的附加信息。
最終PK就是使用對test.csv里的信用卡號打出忠誠度的分?jǐn)?shù)。
非常真實的業(yè)務(wù)表格數(shù)據(jù)!
這與過去直接load一個iris data,fit一下的感受不一樣了吧。
04 數(shù)據(jù)探索
訓(xùn)練集沒有空值。
測試集有一個首次激活月份數(shù)據(jù)為空。
明天繼續(xù)。
小結(jié):
1、集成樹模型由于良好的性能,精度,可解釋性,為kaggle比賽首選,也是AI量化交易的首選。
2、集成樹的基礎(chǔ)使用非常簡潔。
3、難在特征工程,選擇,數(shù)據(jù)處理以及參數(shù)調(diào)優(yōu)。
最近文章:
入門機(jī)器學(xué)習(xí)落地AI量化的最佳路徑:類kaggle的算法競賽
聯(lián)系客服