早上看到社区中有一篇《在BigQuant上用AI挑战虚拟股票预测竞赛》
对这个竞赛比较感兴趣,但是这篇文章里一会操作代码,一会又图形界面,理解不能。
帖子下面倒是有个兄弟提交了自己的版本,就是复杂了点。 这里我写一个极简的入门版,大家可以在其基础上随意的发挥。
如果大家对xgboost, lgb或者rnn, lstm在这块的应用感兴趣或者有问题,我们可以后续讨论。
该竞赛是个二分类任务,可以导入简单的逻辑回归模型使用,不太清楚的萌新可以去看一篇绿团的介绍帖子,写的挺好。 又注意到官网中的提交实例,再导入一个回归模型使用。
#导入必要依赖 pd和np已有
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDRegressor
import numpy as np
from sklearn.metrics import log_loss
数据分为测试集和训练集,根据官网说明,除了特征外,还增加了字段group。训练集中还包括 label, weight, era分别是对应目标值y, 计算损失函数时的权重以及一个用于交叉验证的参数。
这里我使用的w2的数据,最新已经更新到w7,但是在预测时会报错。先用回w2的,这个问题回头再看吧。
#导入训练集和测试集
m1 = M.convert_csv_to_hdf.v1(
input_ds=DataSource('bigquant-challengerai-trendsense-w2-testset')
)
df_test = m1.data.read_df()
df_test.head()
m2 = M.convert_csv_to_hdf.v1(
input_ds=DataSource('bigquant-challengerai-trendsense-w2-trainingset')
)
df_train = m2.data.read_df()
df_train.head()
交叉验证只是为了防止训练过拟合,这里先不予考虑。
#提取权重
sample_weight = df_train.weight
#获取训练集y
train_y = df_train.label.values
#获取测试集x
pred_x = df_test.drop(['id','group'], axis=1)
#获取训练集x
train_x = df_train[pred_x.columns]
#model = LogisticRegression()
model = SGDRegressor()
#模型训练
model.fit(train_x, train_y)
#模型打分,只是示例,这种打分完全过拟合
model.score(train_x, train_y)
#模型预测
pred_y = model.predict(pred_x)
print(pred_y)
pred = pd.DataFrame()
pred['id'] = df_test.id.values
pred['proba'] = pred_y
pred.head()
pred.to_csv('simple.csv')