์์์ ์ ์กฐ๊ธฐ๊ฒฝ๋ณด AI ์์คํ v2.0
์ค์ ์นด๋ ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์์์ ์์ ํ์ ์ํ์ 3-6๊ฐ์ ์ ์ ์์ธกํ๋ AI ๋ชจ๋ธ
๊ฐ์
- ํ์ ๊ฐ์ง์จ 85.7%: ์ค์ ์ํ ๋งค์ฅ์ ๋๋ถ๋ถ์ ์กฐ๊ธฐ์ ํฌ์ฐฉ
- ์ ํ๋ 97.2%: ๋์ ์ ๋ขฐ๋๋ก ์ํ๋ ํ๊ฐ
- ํด์ ๊ฐ๋ฅ: ๊ตฌ์ฒด์ ์ธ ์ํ ์์ธ๊ณผ ๊ฐ์ ๋ฐฉ์ ์ ์
- ์ค์๊ฐ ๋ถ์: ๊ฐ๋จํ API๋ก ์ฆ์ ์์ธก
V2.0 ์ฃผ์ ๊ฐ์ ์ฌํญ
| ์งํ | 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 |
์์ธ ๊ฐ์ ๋ด์ญ: CHANGELOG_V2.md ์ฐธ๊ณ
๋น ๋ฅธ ์์
1. ์ค์น
# ๋ ํฌ์งํ ๋ฆฌ ํด๋ก
git clone https://github.com/yourusername/early_warning_ai_v2.git
cd early_warning_ai_v2
# ์์กด์ฑ ์ค์น
pip install -r requirements.txt
2. ๋ฐ์ดํฐ ์ค๋น
๋ฐ์ดํฐ ํ์ผ์ data/raw/ ํด๋์ ๋ฃ๊ธฐ:
data/raw/
โโโ big_data_set1_f.csv # ๋งค์ฅ ๊ธฐ๋ณธ ์ ๋ณด
โโโ ds2_monthly_usage.csv # ์๋ณ ์ด์ฉ ๋ฐ์ดํฐ
โโโ ds3_monthly_customers.csv # ์๋ณ ๊ณ ๊ฐ ๋ฐ์ดํฐ
3. ๋ชจ๋ธ ํ์ต
Jupyter ๋ ธํธ๋ถ์ ์คํ:
jupyter notebook notebooks/train_model.ipynb
๋๋ Python ์คํฌ๋ฆฝํธ๋ก:
python src/train.py
4. ์์ธก ์ฌ์ฉ
from src.predictor import EarlyWarningPredictor
# ๋ชจ๋ธ ๋ก๋
model = EarlyWarningPredictor.from_pretrained("models/")
# ๋งค์ฅ ๋ฐ์ดํฐ
store_data = {
'store_id': 'CAFE_001',
'industry': '์นดํ',
'avg_sales': 35,
'reuse_rate': 20.0,
'operating_months': 24,
'sales_trend': -0.08
}
# ์์ธก
result = model.predict(store_data)
print(f"์ํ๋: {result['risk_score']}/100")
print(f"๋ฑ๊ธ: {result['risk_level']}")
print(f"ํ์
ํ๋ฅ : {result['closure_probability']:.1%}")
์ถ๋ ฅ:
์ํ๋: 78.5/100
๋ฑ๊ธ: ๋์
ํ์
ํ๋ฅ : 78.5%
์ฃผ์ ์ํ ์์ธ:
- ๋งค์ถ ๊ฐ์ ์ถ์ธ: 32.5์
- ๊ณ ๊ฐ ์ ๊ฐ์: 25.8์
- ์ฌ์ด์ฉ๋ฅ ํ๋ฝ: 12.3์
ํ๋ก์ ํธ ๊ตฌ์กฐ
early_warning_ai_v2/
โโโ README.md # ์ด ํ์ผ
โโโ CHANGELOG_V2.md # V2.0 ๊ฐ์ ์ฌํญ
โโโ requirements.txt # ์์กด์ฑ
โ
โโโ data/ # ๋ฐ์ดํฐ ํด๋
โ โโโ raw/ # ์๋ณธ ๋ฐ์ดํฐ (์ฌ๊ธฐ์ CSV ํ์ผ ๋ฃ๊ธฐ)
โ โโโ processed/ # ์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ ์๋ ์์ฑ)
โ
โโโ models/ # ํ์ต๋ ๋ชจ๋ธ(์๋ ์์ฑ)
โ โโโ xgboost_model.pkl
โ โโโ lightgbm_model.pkl
โ โโโ config.json
โ โโโ feature_names.json
โ
โโโ src/ # ์์ค ์ฝ๋
โ โโโ predictor.py # ์์ธก ํด๋์ค
โ โโโ feature_engineering.py # ํน์ง ์์ฑ
โ โโโ train.py # ํ์ต ์คํฌ๋ฆฝํธ
โ โโโ utils.py # ์ ํธ๋ฆฌํฐ
โ
โโโ notebooks/ # Jupyter ๋
ธํธ๋ถ
โโโ train_model.ipynb # ํ์ต ๋
ธํธ๋ถ
์ฃผ์ ๊ธฐ๋ฅ
1. ๋ค์ค ๊ธฐ๊ฐ ๋งค์ถ ๋ถ์
- 1๊ฐ์, 3๊ฐ์, 6๊ฐ์, 12๊ฐ์ ์ถ์ธ ๋์ ๋ถ์
- ๋จ๊ธฐ ์๊ธฐ์ ์ฅ๊ธฐ ํ๋ฝ ๋ชจ๋ ๊ฐ์ง
2. ๊ณ ๊ฐ ํ๋ ๋ถ์
- ์ฌ์ด์ฉ๋ฅ ๋ณํ ์ถ์
- ์ ๊ท vs ๊ธฐ์กด ๊ณ ๊ฐ ๋น์จ
- ์ฐ๋ น/์ฑ๋ณ ๊ตฌ์ฑ ๋ณํ
3. ๊ณ์ ์ฑ ํจํด ๊ฐ์ง
- ์ ์ข ๋ณ ๊ณ์ ์ ๋งค์ถ ๋ณ๋ ๊ณ ๋ ค
- ์ค๊ฒฝ๋ณด(False Positive) ๋ํญ ๊ฐ์
4. ์์๋ธ ๋ชจ๋ธ
- XGBoost + LightGBM + CatBoost
- ํ์ดํผํ๋ผ๋ฏธํฐ ์๋ ์ต์ ํ
- ํด๋์ค ๋ถ๊ท ํ ์ฒ๋ฆฌ(SMOTE)
5. ํด์ ๊ฐ๋ฅํ AI
- ์ํ ์์ธ๋ณ ์ ์ํ
- SHAP ๊ฐ ๊ธฐ๋ฐ ์ค๋ช
- ๊ตฌ์ฒด์ ์ธ ์ก์ ์์ดํ ์ ๊ณต
๋ชจ๋ธ ์ฑ๋ฅ
ํผ๋ ํ๋ ฌ (Test Set)
| ์์ธก: ์์ | ์์ธก: ํ์ | |
|---|---|---|
| ์ค์ : ์์ | 581 (TN) | 13 (FP) |
| ์ค์ : ํ์ | 3 (FN) | 30 (TP) |
์ฃผ์ ์งํ
- Accuracy: 97.2%
- Precision: 89.3% - ํ์ ์์ธก ์ 89.3%๊ฐ ์ค์ ํ์
- Recall: 85.7% - ์ค์ ํ์ ์ 85.7%๋ฅผ ๊ฐ์ง
- F1-Score: 87.4%
- AUC-ROC: 0.964
์ฌ์ฉ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ ์์ ๋ฐฉ๋ฒ
1. ์๋ก์ด ๋ฐ์ดํฐ๋ก ํ์ต
๋ฐ์ดํฐ ์ค๋น:
data/raw/ํด๋์ 3๊ฐ์ CSV ํ์ผ ๋ฃ๊ธฐbig_data_set1_f.csv: ๋งค์ฅ ๊ธฐ๋ณธ ์ ๋ณด (ํ์ ์ปฌ๋ผ: ENCODED_MCT, MCT_ME_D)ds2_monthly_usage.csv: ์๋ณ ์ด์ฉ ๋ฐ์ดํฐ (ํ์ ์ปฌ๋ผ: ENCODED_MCT, TA_YM, RC_M1_SAA)ds3_monthly_customers.csv: ์๋ณ ๊ณ ๊ฐ ๋ฐ์ดํฐ (ํ์ ์ปฌ๋ผ: ENCODED_MCT, TA_YM)
ํ์ต ์คํ:
notebooks/train_model.ipynb์คํ๋ชจ๋ธ ํ์ธ:
models/ํด๋์ ์์ฑ๋ ๋ชจ๋ธ ํ์ผ ํ์ธ
2. ์์ธก ํ๋ผ๋ฏธํฐ ์กฐ์
src/predictor.py์ predict() ๋ฉ์๋์์:
# ์ํ๋ ์๊ณ๊ฐ ๋ณ๊ฒฝ (๊ธฐ๋ณธ: 0.5)
result = model.predict(store_data, threshold=0.3) # ๋ ๋ฏผ๊ฐํ๊ฒ
result = model.predict(store_data, threshold=0.7) # ๋ ๋ณด์์ ์ผ๋ก
# ์์๋ธ ๊ฐ์ค์น ๋ณ๊ฒฝ
# models/config.json์์:
{
"ensemble_weights": [0.35, 0.35, 0.30] # XGBoost, LightGBM, CatBoost
}
3. ํน์ง ์ถ๊ฐ/์์
src/feature_engineering.py์ FeatureEngineer ํด๋์ค์์:
def _create_custom_features(self, df):
"""์ปค์คํ
ํน์ง ์ถ๊ฐ"""
features = {}
# ์: ์๋ก์ด ์งํ ์ถ๊ฐ
features['custom_metric'] = df['col1'] / df['col2']
return features
๋ฐฐ์น ์์ธก
import pandas as pd
# CSV์์ ์ฌ๋ฌ ๋งค์ฅ ๋ก๋
stores = pd.read_csv('stores_to_predict.csv')
# ๋ฐฐ์น ์์ธก
results = model.predict_batch(stores)
# ๊ณ ์ํ ๋งค์ฅ ํํฐ
high_risk = results[results['risk_score'] > 70]
high_risk.to_csv('high_risk_stores.csv', index=False)
์ถ๊ฐ ๋ฌธ์
- CHANGELOG_V2.md - V2.0 ์์ธ ๊ฐ์ ์ฌํญ
- notebooks/train_model.ipynb - ์ ์ฒด ํ์ต ๊ณผ์
- src/README.md - ์์ค ์ฝ๋ ์ค๋ช
๊ธฐ์ฌ
์ด์์ PR์ ํ์ํฉ๋๋ค!
๋ผ์ด์ ์ค
MIT License - ์์ ๋กญ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
๋ฌธ์
- GitHub Issues: ์ด์ ๋ฑ๋ก
๋ฉด์ฑ ์กฐํญ: ๋ณธ ๋ชจ๋ธ์ ์์ธก์ ์ฐธ๊ณ ์ฉ์ด๋ฉฐ, ์ค์ ๊ฒฝ์ ํ๋จ์ ์ ๋ฌธ๊ฐ์ ์๋ดํ์๊ธฐ ๋ฐ๋๋๋ค.
- Downloads last month
- -