owned this note
owned this note
Published
Linked with GitHub
###### tags: `Report`
# ItDL Final Project
Reference: https://www.kaggle.com/saumilagrawal10/g-research-starter-lgbm-pipeline-lb-high
---
### 資料型態
df_train

### Cryptocurrency 的 Asset_ID
df_asset_details

### 兩個新的 feature
upper_shadow:
$High - 取最大值(Close, Open)$
lower_shadow:
$取最小值(Close, Open) - Low$
> 但這是為甚麼呢?
> (瑜)
> 若開盤價小於收盤價會以綠色表示(股票成長),反之則是紅色(股票下跌)。
> 實體(Body)表示開盤價與收盤價在一段時間內的波動幅度。
> 影線(Shadow)則表示在這段時間內出現過的最高價以及最低價,而新增的兩個特徵代表影線的實體長度,對於未來股票的漲跌預測會有幫助。
> 
```python=
def get_features(df):
df_feat = df[['Count', 'Open', 'High', 'Low', 'Close', 'Volume', 'VWAP']].copy()
df_feat['Upper_Shadow'] = upper_shadow(df_feat)
df_feat['Lower_Shadow'] = lower_shadow(df_feat)
return df_feat
```
return 這個 df 的東西 + 上面講的 upper_shadow & lower_shadow 資料特徵
### 每一種貨幣只會用一種模型
asset_id 就是那一個貨幣的 id
```python=
def get_Xy_and_model_for_asset(df_train, asset_id):
df = df_train[df_train["Asset_ID"] == asset_id]
# TODO: Try different features here!
df_proc = get_features(df)
df_proc['y'] = df['Target']
df_proc = df_proc.dropna(how="any")
X = df_proc.drop("y", axis=1)
y = df_proc["y"]
# TODO: Try different models here!
model =LGBMRegressor(n_estimators=11000,num_leaves=700,learning_rate=0.09)
model.fit(X, y)
# 這一步就train完了...
return X, y, model
```
y 就是 Target
X 就是 其他資料
預設的 model 是 LGBMRegression
n_estimators(是num_itertations的別名)可視為循環次數,或者稱為樹的數目。
num_leaves
return X, y, model
> 要去看一下這個 LGBM model 是啥密毀
> (瑜)
> 此模型適合在大型資料下去做處理
> LGBM樹的生長方式是垂直方向的,其他的算法都是水平方向的,也就是說Light GBM生長的是樹的葉子,其他的算法生長的是樹的層次。LightGBM選擇具有最大誤差的樹葉進行生長,當生長同樣的樹葉,生長葉子的算法可以比基於層的算法減少更多的loss。
原文網址:https://kknews.cc/tech/y3a3x8j.html
> LGBM(Light Gradient Boosting Machine)是以GBDT(Gradient Boosting Decision Tree)演算法為基礎去做改良的方法。而GBDT的想法就是利用梯度下降來對新的學習器進行跌代。底下網址有對於GBDT以例子作為簡單介紹。
> https://zhuanlan.zhihu.com/p/130461268
### 創建每一個虛擬貨幣的模型
```python=
Xs = {}
ys = {}
models = {}
for asset_id, asset_name in zip(df_asset_details['Asset_ID'], df_asset_details['Asset_Name']):
print(f"Training model for {asset_name:<16} (ID={asset_id:<2})")
X, y, model = get_Xy_and_model_for_asset(df_train, asset_id)
Xs[asset_id], ys[asset_id], models[asset_id] = X, y, model
```

-
### 預測
env: 看起來就是 kaggle 給的一個測試環境
iter_test: 就是在這個環境裡面去取得 iteration 的測試資料 (iteration 就是一個可以讓他被重複的東東,因為在跑預測的時候會用 for loop 來跑,所以才會是 iteration 的)
```python=
env = gresearch_crypto.make_env()
iter_test = env.iter_test()
for i, (df_test, df_pred) in enumerate(iter_test):
for j , row in df_test.iterrows():
model = models[row['Asset_ID']]
# 去選取對應 Asset_ID 的 model
x_test = get_features(row)
y_pred = model.predict([x_test])[0]
df_pred.loc[df_pred['row_id'] == row['row_id'], 'Target'] = y_pred
# Print just one sample row to get a feeling of what it looks like
if i == 0 and j == 0:
display(x_test)
# Display the first prediction dataframe
if i == 0:
display(df_pred)
# Send submissions
env.predict(df_pred)
```
---
### gresearch_crypto
```python=
(test_df, sample_prediction_df) = next(iter_test)
test_df.head(3)
```

-
```python=
sample_prediction_df.head(3)
```

## Reference
Candlestick: https://thismatter.com/money/technical-analysis/candlestick-charts.htm