# 醫院專案 Retrain 架構 ###### tags: `國泰專案` ## 流程圖 ```mermaid graph LR A["DataJoiner"] --> B["DataCleaner"] --> C["DataLabler"] --> D["DataAggregator"] --> E["儲存結果"] F["DataFilter"] --> G["DAModel <br> (改寫 henry 程式)"] --> H["產出分析的報表"] D2["DataDescriptor"] ``` ## 開發動機 1. 建立自動化的流水線,縮短日後資料分析週期。 2. 降低人為因素,減少錯誤發生。 3. 為日後 **retrain 機制(AirFlow)** 提供模板。 ## 精神 根據不同的業務需求,只需要改動配置文件的參數即可,不需要動 code。 ## 組件功能描述 1. `DataJoiner(key, columns)`:步驟如下 + 去除重複的列。 + 保留所有在 `columns` 中的欄位。 + 根據 `key`,將多張表(內)連起來。 2. `DataCleaner(filter_row_dict, replace_dict, normal_dict)`:包含下列操作 + 根據條件去除不需要的列 (ex: 年齡 < 14)。 + 將某些欄位的特定值換成其他值。 + 如果某些欄位的值不在範圍內,將其設為 NA。 3. `DataLabler(label_df_path_dict, diag_list)`:進行資料標籤 + `label_df_path_dict`: 由具有 `DIAGNOSIS` 資料表路徑所構成的字典。 + `diag_list`: 蒐集所有敗血症類型英文名的欄位。 4. `DataAggregator()`: 將多張表合併 (axis=0) 5. `DataFilter(config_dict)`:根據條件篩選部分的列,輸出為 `dict[(train_df, test_df)]`。`config_dict` 的形式如下。 ```python filter_config_dict = { '1': ({'division': '1', 'start': '202001', 'end': '202012'}, {'division': '3', 'start': '202001', 'end': '202012'}) } ``` 6. `DataDescriptor(config_dict)`:過濾資料,並計算資料的一些特徵,如陽性人數、陰性人數、比例等。`config_dict` 的形式如下。 ```python filter_config_dict = { '1': {'division': '1', 'start': '202001', 'end': '202012'}, '3': {'division': '3', 'start': '202001', 'end': '202012'}, '4': {'division': '4', 'start': '202001', 'end': '202012'} ``` 7. `DAModel(exclude_col, y_col, model_type, task, scorer, encoder='label', normalize=False, auto_fill=False, balance=True)`:訓練 **XGBoost** 模型,並用 `test_df` 評估模型成效。 + `exclude_col`: 要移除的欄位。 + `y_col`: 標籤所屬欄位。 + `model_type`: 模型的類型,目前僅提供 `'XGB'` 這個選項。 + `task`: 提供 `'classification'`, `'regresssion'` 兩個選項。 + `scorer`: 做模型選擇時的評估標準。 + `encoder` + `normalize` + `auto_fill`: 是否填補缺失值。 + `balance`: 是否增加少樣本權重使正負樣本總權重一致。 8. **產出分析報表** ## 待辦事項 1. retrain 2. 說明文件 + 驗證個數 x + 驗證 2020 訓練 2021 測試結果與之前算的一致 ![](https://i.imgur.com/eyx9xtj.png) + 實驗滑動窗口方式結果會不會比較好 (一年) ![](https://i.imgur.com/eWm6sDG.png) + 驗證 2020 上班年訓練 2021 測試結果與之前算的一致 ![](https://i.imgur.com/JeZ1HWP.png) ![](https://i.imgur.com/EA6cfgv.png) + 實驗滑動窗口方式結果會不會比較好 (半年) ![](https://i.imgur.com/NPVmm3z.png) 3. 個分院敗血症個數 1. **division3** ![](https://i.imgur.com/3nYY2QP.png) ![](https://i.imgur.com/gBZa57F.png) 2. **division4** ![](https://i.imgur.com/zXP9Rbd.png) ![](https://i.imgur.com/6yxOn5M.png) 4. 使用總院去預測其他兩個院區 + **division3**: normal 1 year ![](https://i.imgur.com/HrwhBu2.png) + **division4**: normal 1 year ![](https://i.imgur.com/za4WUV7.png) 5. 自己預測自己 + **division3**: normal 1 year ![](https://i.imgur.com/dmfYptP.png) + **division4**: normal 1 year ![](https://i.imgur.com/w86vinz.png) 6. 使用全部資料來預測 1. **division1** ![](https://i.imgur.com/cugTjay.png) 2. **division3** ![](https://i.imgur.com/mvatQCZ.png) 3. **division4** ![](https://i.imgur.com/zC2bqdQ.png)