Delete README.md
Browse files
README.md
DELETED
|
@@ -1,272 +0,0 @@
|
|
| 1 |
-
### κ°μ거리(Visibility) μμΈ‘ λͺ¨λΈλ§ νλ‘μ νΈ
|
| 2 |
-
|
| 3 |
-
κΈ°μΒ·λκΈ°μ€μΌΒ·ν곡μ 보(ASOS, DataOn, TAF)λ₯Ό ν΅ν©ν΄ κ°μ거리(`visi`)λ₯Ό μμΈ‘ν©λλ€. λΆκ· ν λ°μ΄ν°λ₯Ό SMOTENC/CTGANμΌλ‘ 보κ°νκ³ , GBDT(LightGBM/XGBoost)μ νμΈλ¬ λ₯λ¬λ(ResNet-like, FT-Transformer, DeepGBM)μ κ²°ν©ν΄ λ€μ€/μ΄μ§ λΆλ₯λ₯Ό μνν©λλ€.
|
| 4 |
-
|
| 5 |
-
### κΈ°μ μ€ν(Tech Stack)
|
| 6 |
-
|
| 7 |
-
- λ°μ΄ν° μ²λ¦¬: `pandas`, `numpy`
|
| 8 |
-
- EDA/μκ°ν: `matplotlib`, `seaborn`
|
| 9 |
-
- μνλ§/λΆκ· ν μ²λ¦¬: `imbalanced-learn (SMOTENC)`, `CTGAN`, `Optuna`(CTGAN νμ΄νΌνλΌλ―Έν°), μ§μ/μ°λ κΈ°λ° λΆν
|
| 10 |
-
- λͺ¨λΈλ§(GBDT): `LightGBM`, `XGBoost`(GPU μ΅μ
ν¬ν¨, μ¬μ©μ μ μ CSI νκ°)
|
| 11 |
-
- λͺ¨λΈλ§(λ₯λ¬λ): `PyTorch` κΈ°λ° `ResNetLike`, `FTTransformer`, `DeepGBM`
|
| 12 |
-
- μ΅μ ν: `hyperopt`(LightGBM/XGBoost), `Optuna`(CTGAN)
|
| 13 |
-
- μ νΈ/μ μ₯: `joblib`
|
| 14 |
-
|
| 15 |
-
### μμ€ν
μν€ν
μ²(νμ΄νλΌμΈ)
|
| 16 |
-
|
| 17 |
-
1) λ°μ΄ν° μμ§/μ μ¬: `data/ASOS`, `data/dataon`, `data/data_for_TAF`
|
| 18 |
-
2) λ³ν©/μ μ²λ¦¬: `0.air_data_merge.ipynb` β `1.data_merge.ipynb` β `2.eda_preproccesing.ipynb`
|
| 19 |
-
3) λ°μ΄ν° μ¦κ°(λΆκ· ν μ²λ¦¬): `Analysis_code/make_oversample_data/` λ΄ `SMOTENC` β `CTGAN(+Optuna)` β κ·μΉ κΈ°λ° νν°λ§
|
| 20 |
-
4) λ°μ΄ν° λΆν : μ§μλ³(`*_train.csv`, `*_test.csv`), μ°λ κΈ°λ° 3-Fold νλμμ
|
| 21 |
-
5) νμ΅: GBDT(`optima/*.py`)μ λ₯λ¬λ λ
ΈνΈλΆ(`deeplearning_model_*`)
|
| 22 |
-
6) νκ°/λΆμ: μ¬μ©μ μ μ `CSI` + F1/Accuracy, `model_visualize.ipynb`, `find_reason/*`(νΈλ λ, λΆν¬ λΉκ΅)
|
| 23 |
-
7) μμλΈ/μ΅μ’
: `model_voting_test_best_sample/*`, `final_test/final.ipynb`
|
| 24 |
-
|
| 25 |
-
### TL;DR (λΉ λ₯Έ μμ)
|
| 26 |
-
|
| 27 |
-
1) νμ΄μ¬ νκ²½ μ€λΉ ν νμ ν¨ν€μ§ μ€μΉ
|
| 28 |
-
|
| 29 |
-
```bash
|
| 30 |
-
pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
| 31 |
-
pip install pandas numpy scikit-learn matplotlib seaborn imbalanced-learn optuna ctgan xgboost lightgbm joblib
|
| 32 |
-
```
|
| 33 |
-
|
| 34 |
-
2) λ°μ΄ν° λ°°μΉ
|
| 35 |
-
- μμ²/μ€κ° μ°μΆλ¬Όμ `data/` νμμ λ°°μΉ. νμ΅μ© CSV/featherλ `data/data_for_modeling/` μ°Έκ³ .
|
| 36 |
-
|
| 37 |
-
3) μ€λ²μνλ§ μν(SMOTE/CTGAN)
|
| 38 |
-
|
| 39 |
-
```bash
|
| 40 |
-
cd Analysis_code/make_oversample_data
|
| 41 |
-
python smote_sample_1.py
|
| 42 |
-
python oversampling_code.py
|
| 43 |
-
```
|
| 44 |
-
|
| 45 |
-
4) GBDT μ΅μ ν/νμ΅ μμ(μμΈμ)
|
| 46 |
-
|
| 47 |
-
```bash
|
| 48 |
-
cd ../optima
|
| 49 |
-
python LGB_smote_seoul.py
|
| 50 |
-
python XGB_smote_seoul.py
|
| 51 |
-
```
|
| 52 |
-
|
| 53 |
-
5) λ₯λ¬λ λͺ¨λΈ νμ΅/νκ°: λ
ΈνΈλΆ μ€ν(`Analysis_code/` λ΄ `.ipynb`)
|
| 54 |
-
|
| 55 |
-
---
|
| 56 |
-
|
| 57 |
-
### νλ‘μ νΈ κ΅¬μ‘°
|
| 58 |
-
|
| 59 |
-
```
|
| 60 |
-
visibility_prediction/
|
| 61 |
-
βββ Analysis_code/
|
| 62 |
-
β βββ 0.air_data_merge.ipynb
|
| 63 |
-
β βββ 1.data_merge.ipynb
|
| 64 |
-
β βββ 2.eda_preproccesing.ipynb
|
| 65 |
-
β βββ 3.oversampling.ipynb
|
| 66 |
-
β βββ deeplearning_model_binary.ipynb
|
| 67 |
-
β βββ deeplearning_model_multi.ipynb
|
| 68 |
-
β βββ make_train_test.ipynb
|
| 69 |
-
β βββ model_visualize.ipynb
|
| 70 |
-
β βββ final_test/
|
| 71 |
-
β β βββ final.ipynb
|
| 72 |
-
β βββ find_reason/ # μ§μλ³ νΈλ λ/μμΈ λΆμ λ
ΈνΈλΆ
|
| 73 |
-
β βββ sampling_data_test/ # μνλ§ λ°μ΄ν° μ±λ₯ ν
μ€νΈ λ
ΈνΈλΆ
|
| 74 |
-
β βββ model_voting_test_best_sample/
|
| 75 |
-
β β βββ ensemble__voting_best_sample.ipynb
|
| 76 |
-
β βββ make_oversample_data/
|
| 77 |
-
β β βββ oversampling_code.py # SMOTENC+CTGAN νμ΄νλΌμΈ
|
| 78 |
-
β β βββ smote_sample_1.py # μ°λ/μ μ²λ¦¬ ν¬ν¨ SMOTE μν
|
| 79 |
-
β β βββ (gan_sample_*.py λ±)
|
| 80 |
-
β βββ optima/ # GBDT νμ΄νΌνλΌλ―Έν° νμ/νμ΅ μ€ν¬λ¦½νΈ
|
| 81 |
-
β β βββ LGB_smote_seoul.py
|
| 82 |
-
β β βββ XGB_smote_seoul.py
|
| 83 |
-
β βββ models/
|
| 84 |
-
β β βββ best_resnet_model.pth
|
| 85 |
-
β β βββ tabnet_model.zip
|
| 86 |
-
β βββ deepgbm.py
|
| 87 |
-
β βββ ft_transformer.py
|
| 88 |
-
β βββ resnet_like.py
|
| 89 |
-
βββ data/
|
| 90 |
-
β βββ ASOS/ # κΈ°μ
|
| 91 |
-
β βββ dataon/ # λκΈ°μ€μΌ(λμ©λ μΌμλ³ CSV)
|
| 92 |
-
β βββ data_for_modeling/ # μ§μλ³ train/test CSV λ° feather
|
| 93 |
-
β βββ data_for_demo/
|
| 94 |
-
β βββ data_for_TAF/ # 곡ν TAF(ν곡기μ) CSV
|
| 95 |
-
β βββ data_oversampled/
|
| 96 |
-
β βββ smote/
|
| 97 |
-
β βββ ctgan7000/
|
| 98 |
-
β βββ ctgan10000/
|
| 99 |
-
β βββ ctgan20000/
|
| 100 |
-
βββ README.md
|
| 101 |
-
```
|
| 102 |
-
|
| 103 |
-
---
|
| 104 |
-
|
| 105 |
-
### λ°μ΄ν° λ° λ³μ(Variables)
|
| 106 |
-
|
| 107 |
-
- λͺ©ν λ³μ
|
| 108 |
-
- `visi`: κ°μ거리(μ°μκ°). ν©μ± νλ³Έ νν°λ§ κ·μΉμμ νμΈλλ κ΅¬κ° μμ: class 0μ [0,100), class 1μ [100,500), class 2λ κ·Έ μΈ κ΅¬κ°μΌλ‘ μ¬μ©λ©λλ€.
|
| 109 |
-
- `multi_class`: λ€μ€ λΆλ₯ λΌλ²¨(μ μ 0/1/2)
|
| 110 |
-
- `binary_class`: μ΄μ§ λΌλ²¨. κ·μΉ: `binary_class = 0 if multi_class == 2 else 1`
|
| 111 |
-
|
| 112 |
-
- μ£Όμ νΌμ² κ·Έλ£Ή(μ½λ κΈ°μ€)
|
| 113 |
-
- κΈ°μ(ASOS): `temp_C`, `precip_mm`, `wind_speed`, `wind_dir`(μ μ¨β0 μΉν), `hm`, `vap_pressure`, `dewpoint_C`, `loc_pressure`, `sea_pressure`, `solarRad`, `snow_cm`, `cloudcover`(int), `lm_cloudcover`(int), `low_cloudbase`, `groundtemp`
|
| 114 |
-
- λκΈ°μ€μΌ(DataOn): `O3`, `NO2`, `PM10`, `PM25`
|
| 115 |
-
- μκ°/μ£ΌκΈ°: `year`(int), `month`(int), `hour`(int), `hour_sin`, `hour_cos`, `month_sin`, `month_cos`
|
| 116 |
-
- νμ: `ground_temp - temp_C`(μ§λ©΄-κΈ°μ¨ μ°¨)
|
| 117 |
-
|
| 118 |
-
- λ²μ£Όν λ³μ(λͺ¨λΈ/μνλ§ κ΄μ )
|
| 119 |
-
- `wind_dir`, `cloudcover`, `lm_cloudcover`, κ·Έλ¦¬κ³ `int` νμ
μ μκ° λ³μ(`year`, `month`, `hour`)λ SMOTENC/GBDTμμ λ²μ£ΌνμΌλ‘ μ·¨κΈλ¨(μ½λμμ `float64`κ° μλ μ΄ μΈλ±μ€ μλ νμ§)
|
| 120 |
-
|
| 121 |
-
- μ μ²λ¦¬ κ·μΉ(λ°μ·)
|
| 122 |
-
- `wind_dir` μ€ `'μ μ¨'`μ "0"μΌλ‘ μΉν ν μ μν λ³ν
|
| 123 |
-
- `cloudcover, lm_cloudcover` μ μν λ³ν
|
| 124 |
-
- νμ΅ μ νκΉ/보쑰 μ΄(`multi_class, binary_class`) λΆλ¦¬ ν νμ μ μ¬κ³μ°
|
| 125 |
-
|
| 126 |
-
---
|
| 127 |
-
|
| 128 |
-
### EDA λ° μ μ²λ¦¬
|
| 129 |
-
|
| 130 |
-
- λ³ν©/μ 리
|
| 131 |
-
- μΈλ±μ€ μ΄ μ κ±°: `Unnamed: 0` λλ‘
|
| 132 |
-
- μλ£ν μ ν©μ±: `cloudcover`, `lm_cloudcover` μ μν; `year`, `month`, `hour` μ μν
|
| 133 |
-
- νΉμκ° μΉν: `wind_dir == 'μ μ¨'` β "0" ν μ μν λ³ν
|
| 134 |
-
|
| 135 |
-
- νΉμ§ 곡ν
|
| 136 |
-
- μ£ΌκΈ°ν μΈμ½λ©: `hour_sin`, `hour_cos`, `month_sin`, `month_cos`
|
| 137 |
-
- μ°¨λΆν νμ: `ground_temp - temp_C`
|
| 138 |
-
|
| 139 |
-
- λΆν¬/νΈλ λ λΆμ
|
| 140 |
-
- μ§μλ³ μκ³μ΄ νΈλ λ: `find_reason/*_trend.ipynb`
|
| 141 |
-
- λΆν¬ λΉκ΅/λ³ν κ°μ§: `find_reason/wasserstein_distance.ipynb`(Wasserstein 거리 κΈ°λ° λΆν¬ μ°¨μ΄ μ λν)
|
| 142 |
-
|
| 143 |
-
- λ°μ΄ν° λΆν
|
| 144 |
-
- μ§μ λ¨μ λ°μ΄ν°μ
(`*_train.csv`, `*_test.csv`)
|
| 145 |
-
- μ°λ κΈ°λ° νλμμ 3-Fold(2018β2020 μ‘°ν©)λ‘ μΌλ°ν μ±λ₯ κ²μ¦
|
| 146 |
-
|
| 147 |
-
### λΆκ· ν μ²λ¦¬ λ° ν©μ± μνλ§
|
| 148 |
-
|
| 149 |
-
- SMOTENC
|
| 150 |
-
- λ²μ£Όν μΈλ±μ€: μ
λ ₯ νΉμ± μ€ `float64`κ° μλ μ΄μ μμΉ μΈλ±μ€ μ¬μ©
|
| 151 |
-
- μνλ§ μ λ΅ μμ: `{0: 10000, 1: 10000, 2: κΈ°μ‘΄ κ°μ}` λλ λ°μ΄ν° κ·λͺ¨μ λ°λΌ `{0: 500/1000, 1: ceil(n1/100)*100, 2: n2}`
|
| 152 |
-
- μ¬κ³μ°: μνλ§ ν `multi_class`μμ `binary_class` λ° μ£ΌκΈ°/μ°¨λΆ νμμ 볡ꡬ
|
| 153 |
-
|
| 154 |
-
- CTGAN(+Optuna)
|
| 155 |
-
- ν΄λμ€ 0, 1μ λμμΌλ‘ Optunaλ‘ `embedding_dim, generator_dim, discriminator_dim, pac, batch_size, discriminator_steps` νμ ν ν©μ±
|
| 156 |
-
- μμ± νλ³Έ νμ§ νν°: `class 0 β 0 β€ visi < 100`, `class 1 β 100 β€ visi < 500`
|
| 157 |
-
- μ΅μ’
ν©λ³Έ ν νμ/보쑰 νΌμ²(`binary_class`, μ£ΌκΈ°/μ°¨λΆ νλͺ©) 볡ꡬ
|
| 158 |
-
|
| 159 |
-
- μ°μΆλ¬Ό
|
| 160 |
-
- `data/data_oversampled/smote/`, `ctgan7000/`, `ctgan10000/`, `ctgan20000/` νμμ μ§μλ³ CSV μ μ₯
|
| 161 |
-
|
| 162 |
-
---
|
| 163 |
-
|
| 164 |
-
### λͺ¨λΈ μν€ν
μ²(μμΈ)
|
| 165 |
-
|
| 166 |
-
- λ₯λ¬λ(tabular)
|
| 167 |
-
- `resnet_like.py`
|
| 168 |
-
- μ
λ ₯: `x_num [B, N_num]`, `x_cat [B, N_cat]` β concat β μ
λ ₯μ ν(`d_main=128`) β μμ°¨λΈλ‘(`n_blocks=4`, `d_hidden=64`, `dropout_first=0.25`) β μΆλ ₯μΈ΅
|
| 169 |
-
- μΆλ ₯: `num_classes == 2 β 1 λ‘μ§`, `> 2 β K λ‘μ§`
|
| 170 |
-
- `ft_transformer.py`
|
| 171 |
-
- μμΉ: Linear(`num_features β d_token=192`), λ²μ£Ό: `cat_cardinalities`λ³ `nn.Embedding(d_token)` ν ν©μ±
|
| 172 |
-
- μΈμ½λ: `TransformerEncoderLayer(d_model=d_token, nhead=8, dropoutβ0.2)` Γ `n_blocks=6` β νκ· νλ§ β λΆλ₯ ν€λ
|
| 173 |
-
- `deepgbm.py`
|
| 174 |
-
- μμΉ Linear(`d_main=128`) + λ²μ£Ό μλ² λ© ν©μ° β μμ°¨ MLP λΈλ‘(`n_blocks=4`, `d_hidden=64`, `dropoutβ0.2`) β λΆλ₯ ν€λ
|
| 175 |
-
|
| 176 |
-
- GBDT
|
| 177 |
-
- LightGBM(`optima/LGB_smote_seoul.py`): `objective='multiclassova'`, `n_estimatorsβ4000`, μ‘°κΈ°μ’
λ£, GPU μ΅μ
μμ μ‘΄μ¬, `hyperopt`λ‘ `max_depth, min_child_weight, num_leaves, subsample, learning_rate` νμ
|
| 178 |
-
- XGBoost(`optima/XGB_smote_seoul.py`): `objective='multi:softprob'`, `tree_method='hist'`, `enable_categorical=True`, GPU μ΅μ
, `hyperopt`λ‘ ν΅μ¬ νμ΄νΌνλΌλ―Έν° νμ, `eval_metric=CSI`
|
| 179 |
-
|
| 180 |
-
---
|
| 181 |
-
|
| 182 |
-
### νμ΅/κ²μ¦ μ λ΅
|
| 183 |
-
|
| 184 |
-
- μ°λ κΈ°λ° νλμμ 3-Fold(μμ)
|
| 185 |
-
- Fold1: Train 2018β2019 β Val 2020
|
| 186 |
-
- Fold2: Train 2018β2020 β Val 2019
|
| 187 |
-
- Fold3: Train 2019β2020 β Val 2018
|
| 188 |
-
- μ§μ λ¨μλ‘ λ³λ νμ΅(μ: `seoul_train.csv` λ±)
|
| 189 |
-
|
| 190 |
-
---
|
| 191 |
-
|
| 192 |
-
### νκ° μ§ν
|
| 193 |
-
|
| 194 |
-
- μ¬μ©μ μ μ CSI(Critical Success Index) λ€μ€λΆλ₯ λ²μ
|
| 195 |
-
|
| 196 |
-
```python
|
| 197 |
-
H = cm[0, 0] + cm[1, 1]
|
| 198 |
-
F = (cm[1, 0] + cm[2, 0] + cm[0, 1] + cm[2, 1])
|
| 199 |
-
M = (cm[0, 2] + cm[1, 2])
|
| 200 |
-
CSI = H / (H + F + M + 1e-10)
|
| 201 |
-
```
|
| 202 |
-
|
| 203 |
-
- κ·Έ μΈ: μ νλ, F1 λ± λ
ΈνΈλΆ/μ€ν¬λ¦½νΈμμ λ³ν νμΈ
|
| 204 |
-
|
| 205 |
-
---
|
| 206 |
-
|
| 207 |
-
### μ€ν λ°©λ²(μμΈ)
|
| 208 |
-
|
| 209 |
-
- νκ²½ μ€λΉ
|
| 210 |
-
- Python 3.8+ κΆμ₯, CUDA μ§μ μ GPU μ¬μ© κ°λ₯(CTGAN/GBDT μλ ν₯μ)
|
| 211 |
-
- LightGBM GPUκ° λ―Έμ€μΉλΌλ©΄ `pip install lightgbm`μΌλ‘ CPU λ²μ μ¬μ© λλ GPU λΉλ νμ
|
| 212 |
-
|
| 213 |
-
- λ°μ΄ν° μ€λΉ
|
| 214 |
-
- `data/ASOS/`: μ°λλ³ κΈ°μ μμ²
|
| 215 |
-
- `data/dataon/`: λκΈ°μ€μΌ μΌμλ³ CSV(λμ©λ)
|
| 216 |
-
- `data/data_for_modeling/`: μ§μλ³ νμ΅/νκ° μΈνΈ(`*_train.csv`, `*_test.csv`, `df_*.feather`)
|
| 217 |
-
- `data/data_for_TAF/`: 곡νλ³ TAF(ν곡기μ)
|
| 218 |
-
|
| 219 |
-
- μ μ²λ¦¬/νμ
|
| 220 |
-
- `Analysis_code/0.air_data_merge.ipynb` β `1.data_merge.ipynb` β `2.eda_preproccesing.ipynb`
|
| 221 |
-
|
| 222 |
-
- μ€λ²μνλ§
|
| 223 |
-
- `Analysis_code/make_oversample_data/`μμ μ€ν¬λ¦½νΈ μ€ν(μλ¨ TL;DR μ°Έμ‘°)
|
| 224 |
-
|
| 225 |
-
- GBDT μ΅μ ν/νμ΅
|
| 226 |
-
- `Analysis_code/optima/LGB_smote_seoul.py`, `XGB_smote_seoul.py` μ€ν
|
| 227 |
-
- μ°μΆ οΏ½οΏ½λΈμ `Analysis_code/save_model/` νμμ `.pkl`λ‘ μ μ₯
|
| 228 |
-
|
| 229 |
-
- λ₯λ¬λ νμ΅
|
| 230 |
-
- `deeplearning_model_*` λ
ΈνΈλΆμμ νμΈλ¬ λͺ¨λΈ νμ΅/νκ°, `model_visualize.ipynb`λ‘ μκ°ν
|
| 231 |
-
|
| 232 |
-
- μμλΈ/μ΅μ’
νκ°
|
| 233 |
-
- `model_voting_test_best_sample/ensemble__voting_best_sample.ipynb`
|
| 234 |
-
- `final_test/final.ipynb`
|
| 235 |
-
|
| 236 |
-
---
|
| 237 |
-
|
| 238 |
-
### λͺ¨λΈ μ
μΆλ ₯ κ·κ²©(μμ½)
|
| 239 |
-
|
| 240 |
-
- μμΉ μ
λ ₯ `x_num`: `float32` ν
μ `[batch, num_numeric_features]`
|
| 241 |
-
- λ²μ£Ό μ
λ ₯ `x_cat`: μ μ μΈλ±μ€ ν
μ `[batch, num_categorical_features]`
|
| 242 |
-
- μΆλ ₯: μ΄μ§(1 λ‘μ§) λλ λ€μ€λΆλ₯(K λ‘μ§). μμ€/μκ³κ°μ λ
ΈνΈλΆ λ΄ μ€μ μ°Έκ³
|
| 243 |
-
|
| 244 |
-
---
|
| 245 |
-
|
| 246 |
-
### μ¬νμ±/μλ
|
| 247 |
-
|
| 248 |
-
- `random_state=42`(SMOTENC), λͺ¨λΈ μ€ν¬λ¦½νΈ λ΄ `random_state=120` λ±μ κ³ μ κ° μ¬μ©
|
| 249 |
-
- λ°μ΄ν°/νλμ¨μ΄ μ°¨μ΄μ λ°λΌ μ¬νλ₯ μ΄ λ€λ₯Ό μ μμΌλ―λ‘ fold/seedλ₯Ό λͺ
μμ μΌλ‘ μ€μ κΆμ₯
|
| 250 |
-
|
| 251 |
-
---
|
| 252 |
-
|
| 253 |
-
### μ£Όμ/νΈλ¬λΈμν
|
| 254 |
-
|
| 255 |
-
- `optima/LGB_smote_seoul.py`μ `sys.path.append(...)`λ νκ²½ μμ‘΄μ κ²½λ‘μ
λλ€. μΌλ° νκ²½μμλ μ κ±°ν΄λ `from lightgbm import LGBMClassifier`κ° λμν΄μΌ ν©λλ€.
|
| 256 |
-
- μ€ν¬λ¦½νΈλ μλ κ²½λ‘λ₯Ό κ°μ ν©λλ€. μ€ν μ νμ¬ μμ
λλ ν°λ¦¬κ° `Analysis_code/*` νμμΈμ§ νμΈνμΈμ.
|
| 257 |
-
- `wind_dir`μ `'μ μ¨'` κ° μΉν/νλ³νμ΄ λλ½λλ©΄ GBDT/XGBμμ μ€λ₯κ° λ°μν μ μμ΅λλ€.
|
| 258 |
-
- `dataon/`μ λ§€μ° λμ©λμ
λλ€. λ©λͺ¨λ¦¬ μ¬μ λ₯Ό ν보νκ±°λ μ°λ/μ§μ λ¨μλ‘ μ²λ¦¬νμΈμ.
|
| 259 |
-
|
| 260 |
-
---
|
| 261 |
-
|
| 262 |
-
### μμ‘΄μ±
|
| 263 |
-
|
| 264 |
-
- Python 3.8+
|
| 265 |
-
- PyTorch, pandas, numpy, scikit-learn, imbalanced-learn, optuna, ctgan, xgboost, lightgbm, joblib, matplotlib, seaborn
|
| 266 |
-
|
| 267 |
-
---
|
| 268 |
-
|
| 269 |
-
### λΌμ΄μ μ€/μΈμ©
|
| 270 |
-
|
| 271 |
-
- λΌμ΄μ μ€: μΆν μ
λ°μ΄νΈ μμ
|
| 272 |
-
- λ³Έ νλ‘μ νΈ/κ²°κ³Όλ¬Όμ μΈμ© μ `visibility_prediction` μ μ₯μμ μ¬μ©λ λ°μ΄ν° μμ€(ASOS, DataOn, TAF)λ₯Ό λͺ
μν΄ μ£ΌμΈμ.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|