| # μμμ 쑰기경보 AI v2.0 | |
| ## νλ‘μ νΈ κ΅¬μ‘° | |
| ``` | |
| early_warning_ai_v2/ | |
| β | |
| βββ README.md # λ©μΈ κ°μ΄λ | |
| βββ CHANGELOG_V2.md # V2.0 κ°μ μ¬ν | |
| βββ requirements.txt # μμ‘΄μ± | |
| βββ LICENSE # βMIT λΌμ΄μ μ€ | |
| βββ .gitignore # Git μ μΈ νμΌ | |
| β | |
| βββ data/ # λ°μ΄ν° ν΄λ | |
| β βββ README.md # λ°μ΄ν° μ€λΉ κ°μ΄λ | |
| β βββ raw/ # μ¬κΈ°μ CSV νμΌ λ£κΈ° | |
| β β βββ .gitkeep | |
| β βββ processed/ # (μλ μμ±) | |
| β | |
| βββ models/ # νμ΅λ λͺ¨λΈ (μλ μμ±) | |
| β | |
| βββ src/ # μμ€ μ½λ | |
| β βββ README.md # μ½λ μ€λͺ | |
| β βββ predictor.py # μμΈ‘ ν΄λμ€ (νκΉ νμ΄μ€ μ€νμΌ) | |
| β βββ feature_engineering.py # νΉμ§ μμ± (47κ°) | |
| β βββ train.py # νμ΅ μ€ν¬λ¦½νΈ | |
| β | |
| βββ notebooks/ # Jupyter λ ΈνΈλΆ | |
| βββ train_model.ipynb # μ 체 νμ΅ κ³Όμ | |
| ``` | |
| --- | |
| ## μ£Όμ νΉμ§ | |
| ### 1. κΉλν ꡬ쑰 | |
| - **νμ νμΌλ§ ν¬ν¨**: μ€μ λ‘ νμν μ½λμ λ¬Έμλ§ | |
| - **λͺ νν λλ ν 리**: κ° ν΄λμ μ©λκ° λΆλͺ ν¨ | |
| - **μμΈν κ°μ΄λ**: λͺ¨λ ν΄λμ README.md ν¬ν¨ | |
| ### 2. μ€μ©μ μΈ μ€κ³ | |
| - **λ°μ΄ν° λΆλ¦¬**: `data/raw/`μ CSVλ§ λ£μΌλ©΄ λ¨ | |
| - **λͺ¨λν**: κ° κΈ°λ₯μ΄ λ 립μ μΈ νμΌλ‘ λΆλ¦¬ | |
| - **νμ₯ κ°λ₯**: μλ‘μ΄ νΉμ§μ΄λ λͺ¨λΈ μΆκ° μ¬μ | |
| ### 3. μλ²½ν λ¬Έμν | |
| - **README.md**: μ 체 νλ‘μ νΈ κ°μ | |
| - **CHANGELOG_V2.md**: V2.0 μμΈ κ°μ μ¬ν | |
| - **src/README.md**: μμ€ μ½λ μ€λͺ λ° μμ λ°©λ² | |
| - **data/README.md**: λ°μ΄ν° μ€λΉ κ°μ΄λ | |
| --- | |
| ## λΉ λ₯Έ μμ | |
| ### 1. μ€μΉ | |
| ```bash | |
| cd early_warning_ai_v2 | |
| pip install -r requirements.txt | |
| ``` | |
| ### 2. λ°μ΄ν° μ€λΉ | |
| `data/raw/` ν΄λμ 3κ°μ CSV νμΌ λ£κΈ°: | |
| - `big_data_set1_f.csv` | |
| - `ds2_monthly_usage.csv` | |
| - `ds3_monthly_customers.csv` | |
| ### 3. νμ΅ | |
| ```bash | |
| # Jupyter λ ΈνΈλΆμΌλ‘ | |
| jupyter notebook notebooks/train_model.ipynb | |
| # λλ μ€ν¬λ¦½νΈλ‘ | |
| python src/train.py | |
| ``` | |
| ### 4. μμΈ‘ | |
| ```python | |
| from src.predictor import EarlyWarningPredictor | |
| model = EarlyWarningPredictor.from_pretrained("models/") | |
| result = model.predict(store_data) | |
| ``` | |
| --- | |
| ## μ£Όμ νμΌ μ€λͺ | |
| ### README.md | |
| - νλ‘μ νΈ μ 체 κ°μ | |
| - λΉ λ₯Έ μμ κ°μ΄λ | |
| - μ¬μ© λ°©λ² | |
| - νλ‘μ νΈ κ΅¬μ‘° | |
| ### CHANGELOG_V2.md | |
| - V1.0 β V2.0 λͺ¨λ κ°μ μ¬ν | |
| - μ±λ₯ λΉκ΅ν | |
| - μ€μ κ°μ μ¬λ‘ | |
| - ꡬ쑰 λ³κ²½ λ΄μ | |
| ### src/predictor.py | |
| - νκΉ νμ΄μ€ μ€νμΌ API | |
| - `from_pretrained()` λ©μλ | |
| - λ¨μΌ/λ°°μΉ μμΈ‘ | |
| - μν μμΈ λΆμ | |
| ### src/feature_engineering.py | |
| - 47κ° νΉμ§ μλ μμ± | |
| - λ§€μΆ, κ³ κ°, μ΄μ, νΈλ λ, λ³λμ±, κ³μ μ± | |
| - νμ₯ κ°λ₯ν μ€κ³ | |
| ### src/train.py | |
| - μ 체 νμ΅ νμ΄νλΌμΈ | |
| - 컀맨λλΌμΈ μΈν°νμ΄μ€ | |
| - SMOTE ν΄λμ€ λΆκ· ν μ²λ¦¬ | |
| - μλ νκ° λ° μ μ₯ | |
| ### notebooks/train_model.ipynb | |
| - μ 체 νμ΅ κ³Όμ μκ°ν | |
| - EDA (νμμ λ°μ΄ν° λΆμ) | |
| - λ¨κ³λ³ μ€λͺ | |
| - μ±λ₯ νκ° λ° λΆμ | |
| --- | |
| ## λ°μ΄ν° μμ λ°©λ² | |
| ### μλ‘μ΄ λ°μ΄ν°λ‘ νμ΅ | |
| **1λ¨κ³**: `data/raw/`μ CSV νμΌ 3κ° λ°°μΉ | |
| **2λ¨κ³**: νμ΅ μ€ν | |
| ```bash | |
| python src/train.py | |
| ``` | |
| **3λ¨κ³**: μμ±λ λͺ¨λΈ νμΈ | |
| ```bash | |
| ls models/ | |
| # xgboost_model.pkl, lightgbm_model.pkl, config.json λ± | |
| ``` | |
| ### νλΌλ―Έν° μ‘°μ | |
| #### μμΈ‘ μκ³κ° λ³κ²½ | |
| ```python | |
| # src/predictor.pyμ predict() λ©μλμμ | |
| result = model.predict(store_data, threshold=0.3) # λ λ―Όκ°νκ² | |
| ``` | |
| #### μμλΈ κ°μ€μΉ λ³κ²½ | |
| ```json | |
| // models/config.jsonμμ | |
| { | |
| "ensemble_weights": [0.6, 0.4] // XGBoost 60%, LightGBM 40% | |
| } | |
| ``` | |
| #### νΉμ§ μΆκ° | |
| ```python | |
| # src/feature_engineering.pyμ FeatureEngineer ν΄λμ€μ | |
| def _create_custom_features(self, df): | |
| features = {} | |
| # μλ‘μ΄ νΉμ§ μΆκ° | |
| features['new_metric'] = df['col1'] / df['col2'] | |
| return features | |
| ``` | |
| --- | |
| ## V2.0 ν΅μ¬ κ°μ | |
| ### 1. νΉμ§ κ°ν (20κ° β 47κ°) | |
| - λ€μ€ κΈ°κ° μΆμΈ λΆμ | |
| - κ³μ μ± ν¨ν΄ κ°μ§ | |
| - κ³ κ° νλ λ³ν μΆμ | |
| ### 2. ν΄λμ€ λΆκ· ν ν΄κ²° | |
| - SMOTE μ μ© | |
| - Recall +17.5%p ν₯μ | |
| ### 3. λͺ¨λΈ μ΅μ ν | |
| - XGBoost + LightGBM μμλΈ | |
| - νμ΄νΌνλΌλ―Έν° μλ νλ | |
| ### 4. μ±λ₯ ν₯μ | |
| | μ§ν | V1.0 | V2.0 | κ°μ | | |
| |------|------|------|------| | |
| | Accuracy | 94.3% | 97.2% | +2.9%p | | |
| | Recall | 68.2% | 85.7% | +17.5%p | | |
| | Precision | 76.5% | 89.3% | +12.8%p | | |
| --- | |
| ## λ¬Έμ μμΉ | |
| - **μ 체 κ°μ΄λ**: `README.md` | |
| - **κ°μ μ¬ν**: `CHANGELOG_V2.md` | |
| - **μ½λ μ€λͺ **: `src/README.md` | |
| - **λ°μ΄ν° κ°μ΄λ**: `data/README.md` | |
| - **νμ΅ κ³Όμ **: `notebooks/train_model.ipynb` | |
| --- | |
| ## μ¬μ© ν | |
| ### 첫 νμ΅ μ | |
| 1. μν λ°μ΄ν°λ‘ ν μ€νΈ (λΉ λ¦) | |
| 2. μ 체 λ°μ΄ν°λ‘ νμ΅ (μ νν¨) | |
| 3. μ±λ₯ νκ° ν νλΌλ―Έν° μ‘°μ | |
| ### μ±λ₯ κ°μ μ | |
| 1. **νΉμ§ μΆκ°**: `feature_engineering.py` μμ | |
| 2. **νμ΄νΌνλΌλ―Έν°**: `train.py`μμ μ‘°μ | |
| 3. **μμλΈ κ°μ€μΉ**: `config.json` μμ | |
| ### λ°°ν¬ μ | |
| 1. `models/` ν΄λ μ 체 λ³΅μ¬ | |
| 2. `src/predictor.py`λ§ μ¬μ© | |
| 3. API μλ² κ΅¬μΆ (FastAPI μΆμ²) | |
| --- | |
| ## μ£Όμμ¬ν | |
| ### λ°μ΄ν° μ€λΉ | |
| - 3κ°μ CSV νμΌ λͺ¨λ νμ | |
| - μ΅μ 3κ°μ μ΄μμ μλ³ λ°μ΄ν° | |
| - νμ λ§€μ₯ 1-5% κΆμ₯ | |
| ### λͺ¨λΈ μ¬μ© | |
| - μμΈ‘μ μ°Έκ³ μ©, μ€μ νλ¨μ μ λ¬Έκ°μ μλ΄ | |
| - μ£ΌκΈ°μ μ¬νμ΅ κΆμ₯ (3-6κ°μ) | |
| - μ μ’ λ³ μ°¨μ΄ κ³ λ € | |
| --- | |
| ## κΈ°μ¬ λ° λ¬Έμ | |
| - GitHub Issues: λ²κ·Έ 리ν¬νΈ, κΈ°λ₯ μ μ | |
| - Pull Request: μ½λ κ°μ , λ¬Έμ μμ νμ | |
| --- | |
| ## λΌμ΄μ μ€ | |
| MIT License - μμ λ‘κ² μ¬μ©, μμ , λ°°ν¬ κ°λ₯ | |