{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 자영업 조기경보 모델 v2.0 학습\n", "\n", "## 학습 단계\n", "\n", "1. 데이터 로드\n", "2. 탐색적 데이터 분석 (EDA)\n", "3. 특징 생성 (Feature Engineering)\n", "4. 클래스 불균형 처리 (SMOTE)\n", "5. 모델 학습 (XGBoost, LightGBM)\n", "6. 평가 및 분석\n", "7. 모델 저장" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 0. 환경 설정" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:09.197767Z", "start_time": "2025-12-01T09:58:08.836478Z" } }, "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import pickle\n", "import json\n", "import warnings\n", "\n", "warnings.filterwarnings('ignore')\n", "\n", "import sys\n", "\n", "sys.path.append('../src')\n", "\n", "from feature_engineering import FeatureEngineer\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import LabelEncoder\n", "from sklearn.metrics import (accuracy_score, precision_score, recall_score,\n", " f1_score, roc_auc_score, confusion_matrix, classification_report)\n", "import xgboost as xgb\n", "import lightgbm as lgb\n", "from imblearn.over_sampling import SMOTE\n", "\n", "plt.rcParams['font.family'] = 'Apple SD Gothic Neo'\n", "plt.rcParams['axes.unicode_minus'] = False\n", "\n", "print(\"라이브러리 로드 완료\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "라이브러리 로드 완료\n" ] } ], "execution_count": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. 데이터 로드\n", "\n", "**중요**: `data/raw/` 폴더에 다음 파일들이 있어야 합니다:\n", "- `big_data_set1_f.csv`: 매장 기본 정보\n", "- `ds2_monthly_usage.csv`: 월별 이용 데이터\n", "- `ds3_monthly_customers.csv`: 월별 고객 데이터" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:10.762303Z", "start_time": "2025-12-01T09:58:10.569920Z" } }, "source": [ "# 데이터 로드\n", "df_store = pd.read_csv('../data/raw/big_data_set1_f.csv', encoding='cp949', on_bad_lines='skip')\n", "df_usage = pd.read_csv('../data/raw/ds2_monthly_usage.csv', encoding='cp949', on_bad_lines='skip')\n", "df_customer = pd.read_csv('../data/raw/ds3_monthly_customers.csv', encoding='cp949', on_bad_lines='skip')\n", "\n", "print(f\"매장 정보: {df_store.shape}\")\n", "print(f\"이용 데이터: {df_usage.shape}\")\n", "print(f\"고객 데이터: {df_customer.shape}\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "매장 정보: (4185, 9)\n", "이용 데이터: (86590, 15)\n", "고객 데이터: (86590, 17)\n" ] } ], "execution_count": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. 탐색적 데이터 분석 (EDA)" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:11.788665Z", "start_time": "2025-12-01T09:58:11.781507Z" } }, "source": [ "# 매장 정보 확인\n", "print(\"=\" * 70)\n", "print(\"매장 기본 정보\")\n", "print(\"=\" * 70)\n", "print(df_store.head())\n", "print(f\"\\n컬럼: {list(df_store.columns)}\")\n", "print(f\"\\n결측치:\\n{df_store.isnull().sum()}\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "======================================================================\n", "매장 기본 정보\n", "======================================================================\n", " ENCODED_MCT MCT_BSE_AR MCT_NM MCT_BRD_NUM MCT_SIGUNGU_NM HPSN_MCT_ZCD_NM \\\n", "0 16184E93D9 서울 성동구 마장동 성우** NaN 서울 성동구 축산물 \n", "1 4D039EA8B7 서울 성동구 마장동 대보** NaN 서울 성동구 축산물 \n", "2 0074C4990A 서울 성동구 마장동 대용** NaN 서울 성동구 축산물 \n", "3 68308F2746 서울 성동구 마장동 통일** NaN 서울 성동구 축산물 \n", "4 4117EDDE9C 서울 성동구 마장동 한울** NaN 서울 성동구 축산물 \n", "\n", " HPSN_MCT_BZN_CD_NM ARE_D MCT_ME_D \n", "0 마장동 20130320 NaN \n", "1 마장동 20131122 NaN \n", "2 마장동 20140512 NaN \n", "3 마장동 20151124 NaN \n", "4 마장동 20151211 NaN \n", "\n", "컬럼: ['ENCODED_MCT', 'MCT_BSE_AR', 'MCT_NM', 'MCT_BRD_NUM', 'MCT_SIGUNGU_NM', 'HPSN_MCT_ZCD_NM', 'HPSN_MCT_BZN_CD_NM', 'ARE_D', 'MCT_ME_D']\n", "\n", "결측치:\n", "ENCODED_MCT 0\n", "MCT_BSE_AR 0\n", "MCT_NM 0\n", "MCT_BRD_NUM 3643\n", "MCT_SIGUNGU_NM 0\n", "HPSN_MCT_ZCD_NM 0\n", "HPSN_MCT_BZN_CD_NM 1047\n", "ARE_D 0\n", "MCT_ME_D 4058\n", "dtype: int64\n" ] } ], "execution_count": 3 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:12.813669Z", "start_time": "2025-12-01T09:58:12.744117Z" } }, "source": [ "# 타겟 변수 분포 확인\n", "df_store['IS_CLOSED'] = df_store['MCT_ME_D'].notna().astype(int)\n", "\n", "print(\"\\n타겟 변수 (폐업 여부) 분포:\")\n", "print(df_store['IS_CLOSED'].value_counts())\n", "print(f\"\\n폐업 비율: {df_store['IS_CLOSED'].mean():.2%}\")\n", "\n", "# 시각화\n", "plt.figure(figsize=(8, 5))\n", "df_store['IS_CLOSED'].value_counts().plot(kind='bar')\n", "plt.title('매장 상태 분포')\n", "plt.xlabel('0: 영업중, 1: 폐업')\n", "plt.ylabel('매장 수')\n", "plt.xticks(rotation=0)\n", "plt.show()" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "타겟 변수 (폐업 여부) 분포:\n", "IS_CLOSED\n", "0 4058\n", "1 127\n", "Name: count, dtype: int64\n", "\n", "폐업 비율: 3.03%\n" ] }, { "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 4 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:13.696698Z", "start_time": "2025-12-01T09:58:13.686364Z" } }, "source": [ "# 업종별 분포\n", "print(\"\\n업종별 매장 수:\")\n", "print(df_store['HPSN_MCT_BZN_CD_NM'].value_counts().head(10))\n", "\n", "# 업종별 폐업률\n", "industry_closure = df_store.groupby('HPSN_MCT_BZN_CD_NM')['IS_CLOSED'].agg(['sum', 'count', 'mean'])\n", "industry_closure.columns = ['폐업_수', '전체_수', '폐업률']\n", "industry_closure = industry_closure[industry_closure['전체_수'] >= 10].sort_values('폐업률', ascending=False)\n", "\n", "print(\"\\n업종별 폐업률 (상위 10개):\")\n", "print(industry_closure.head(10))" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "업종별 매장 수:\n", "HPSN_MCT_BZN_CD_NM\n", "성수 762\n", "왕십리 538\n", "뚝섬 468\n", "한양대 328\n", "마장동 257\n", "금남시장 249\n", "답십리 179\n", "옥수 121\n", "신금호 100\n", "행당 85\n", "Name: count, dtype: int64\n", "\n", "업종별 폐업률 (상위 10개):\n", " 폐업_수 전체_수 폐업률\n", "HPSN_MCT_BZN_CD_NM \n", "신금호 6 100 0.060000\n", "장한평자동차 2 41 0.048780\n", "한양대 14 328 0.042683\n", "행당 3 85 0.035294\n", "답십리 6 179 0.033520\n", "금남시장 7 249 0.028112\n", "왕십리 15 538 0.027881\n", "성수 21 762 0.027559\n", "마장동 6 257 0.023346\n", "뚝섬 9 468 0.019231\n" ] } ], "execution_count": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. 특징 생성 (Feature Engineering)\n", "\n", "**47개의 특징을 자동으로 생성합니다:**\n", "- 매출 관련 (15개): 다중 기간 추세, 변동성\n", "- 고객 관련 (12개): 재이용률, 연령/성별 구성\n", "- 운영 관련 (8개): 영업 기간, 객단가\n", "- 트렌드 (5개): 선형 추세, 연속 하락\n", "- 변동성 (4개): CV, MAD\n", "- 계절성 (2개): 패턴 감지\n", "- 맥락 (1개): 업종" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:38.799996Z", "start_time": "2025-12-01T09:58:14.891093Z" } }, "source": [ "engineer = FeatureEngineer(include_weather=False)\n", "\n", "all_features = []\n", "all_targets = []\n", "\n", "# 전체 매장에 대해 특징 생성\n", "print(\"특징 생성 중... (시간이 걸릴 수 있습니다)\")\n", "\n", "for idx, store_id in enumerate(df_store['ENCODED_MCT'].unique()):\n", " store_info = df_store[df_store['ENCODED_MCT'] == store_id].iloc[0]\n", " usage_data = df_usage[df_usage['ENCODED_MCT'] == store_id]\n", " customer_data = df_customer[df_customer['ENCODED_MCT'] == store_id]\n", "\n", " # 최소 3개월 이상 데이터가 있는 경우만\n", " if len(usage_data) >= 3:\n", " store_data = {\n", " 'industry': store_info['HPSN_MCT_BZN_CD_NM'] if pd.notna(store_info['HPSN_MCT_BZN_CD_NM']) else '기타',\n", " 'location': store_info['MCT_SIGUNGU_NM']\n", " }\n", "\n", " features = engineer.create_features(store_data, usage_data, customer_data)\n", " target = 1 if pd.notna(store_info['MCT_ME_D']) else 0\n", "\n", " all_features.append(features)\n", " all_targets.append(target)\n", "\n", " if (idx + 1) % 500 == 0:\n", " print(f\" 처리 중... {idx + 1}/{len(df_store['ENCODED_MCT'].unique())}\")\n", "\n", "X = pd.concat(all_features, ignore_index=True)\n", "y = pd.Series(all_targets)\n", "\n", "print(f\"\\n특징 생성 완료\")\n", "print(f\"총 샘플 수: {len(X)}\")\n", "print(f\"특징 수: {X.shape[1]}\")\n", "print(f\"폐업 비율: {y.mean():.2%}\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "특징 생성 중... (시간이 걸릴 수 있습니다)\n", " 처리 중... 500/4185\n", " 처리 중... 1000/4185\n", " 처리 중... 1500/4185\n", " 처리 중... 2000/4185\n", " 처리 중... 2500/4185\n", " 처리 중... 3000/4185\n", " 처리 중... 3500/4185\n", " 처리 중... 4000/4185\n", "\n", "특징 생성 완료\n", "총 샘플 수: 4113\n", "특징 수: 45\n", "폐업 비율: 2.99%\n" ] } ], "execution_count": 6 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:43.979301Z", "start_time": "2025-12-01T09:58:43.977395Z" } }, "source": [ "# 생성된 특징 확인\n", "print(\"생성된 특징 목록:\")\n", "for i, col in enumerate(X.columns, 1):\n", " print(f\"{i:2d}. {col}\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "생성된 특징 목록:\n", " 1. sales_avg_1m\n", " 2. sales_avg_3m\n", " 3. sales_avg_6m\n", " 4. sales_avg_12m\n", " 5. sales_recent_vs_previous\n", " 6. sales_mom_change\n", " 7. sales_yoy_change\n", " 8. sales_max\n", " 9. sales_min\n", "10. sales_range\n", "11. sales_recent_vs_total\n", "12. sales_below_avg\n", "13. sales_recent_trend\n", "14. customer_reuse_rate\n", "15. customer_reuse_rate_last\n", "16. customer_reuse_trend\n", "17. customer_new_rate\n", "18. customer_m12_mal_1020_rat\n", "19. customer_m12_mal_30_rat\n", "20. customer_m12_mal_40_rat\n", "21. customer_m12_mal_50_rat\n", "22. customer_m12_mal_60_rat\n", "23. customer_m12_fme_1020_rat\n", "24. customer_m12_fme_30_rat\n", "25. customer_m12_fme_40_rat\n", "26. customer_m12_fme_50_rat\n", "27. customer_m12_fme_60_rat\n", "28. operation_months\n", "29. operation_months_avg\n", "30. operation_avg_amount\n", "31. operation_avg_amount_last\n", "32. operation_cancel_rate\n", "33. operation_delivery_rate\n", "34. trend_slope\n", "35. trend_r2\n", "36. trend_direction\n", "37. trend_consecutive_down\n", "38. trend_consecutive_up\n", "39. volatility_cv\n", "40. volatility_std\n", "41. volatility_mad\n", "42. volatility_recent_std\n", "43. seasonality_strength\n", "44. seasonality_detected\n", "45. context_industry\n" ] } ], "execution_count": 7 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:46.017556Z", "start_time": "2025-12-01T09:58:45.977519Z" } }, "source": [ "# 특징 통계\n", "print(\"\\n특징 기술 통계:\")\n", "X.describe()" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "특징 기술 통계:\n" ] }, { "data": { "text/plain": [ " sales_avg_1m sales_avg_3m sales_avg_6m sales_avg_12m \\\n", "count 4113.000000 4113.000000 4113.000000 4113.000000 \n", "mean 50.209701 49.870330 49.834367 50.035897 \n", "std 8.975016 7.155192 6.399777 6.112697 \n", "min 37.500000 37.500000 37.500000 37.500000 \n", "25% 50.000000 45.833333 45.833333 46.428571 \n", "50% 50.000000 50.000000 50.000000 50.000000 \n", "75% 62.500000 54.166667 52.083333 53.125000 \n", "max 62.500000 62.500000 62.500000 62.500000 \n", "\n", " sales_recent_vs_previous sales_mom_change sales_yoy_change \\\n", "count 4113.000000 4113.000000 4113.000000 \n", "mean 0.593289 3.163546 1.504984 \n", "std 11.278638 19.978850 18.420789 \n", "min -40.000000 -40.000000 -40.000000 \n", "25% 0.000000 0.000000 0.000000 \n", "50% 0.000000 0.000000 0.000000 \n", "75% 0.000000 0.000000 0.000000 \n", "max 66.666667 66.666667 66.666667 \n", "\n", " sales_max sales_min sales_range ... trend_r2 \\\n", "count 4113.000000 4113.000000 4113.000000 ... 3083.000000 \n", "mean 57.123754 43.177121 13.946633 ... 0.069713 \n", "std 6.593646 6.868727 9.709328 ... 0.114427 \n", "min 37.500000 37.500000 0.000000 ... 0.000000 \n", "25% 50.000000 37.500000 0.000000 ... 0.005870 \n", "50% 62.500000 37.500000 12.500000 ... 0.030303 \n", "75% 62.500000 50.000000 25.000000 ... 0.085372 \n", "max 62.500000 62.500000 25.000000 ... 1.000000 \n", "\n", " trend_direction trend_consecutive_down trend_consecutive_up \\\n", "count 4113.000000 4113.000000 4113.000000 \n", "mean 0.016047 0.122052 0.175541 \n", "std 0.859393 0.337625 0.393051 \n", "min -1.000000 0.000000 0.000000 \n", "25% -1.000000 0.000000 0.000000 \n", "50% 0.000000 0.000000 0.000000 \n", "75% 1.000000 0.000000 0.000000 \n", "max 1.000000 2.000000 2.000000 \n", "\n", " volatility_cv volatility_std volatility_mad volatility_recent_std \\\n", "count 4113.000000 4113.000000 4113.000000 4113.000000 \n", "mean 10.701480 5.250956 4.196452 4.008452 \n", "std 8.257864 3.992813 3.658268 5.173531 \n", "min 0.000000 0.000000 0.000000 0.000000 \n", "25% 0.000000 0.000000 0.000000 0.000000 \n", "50% 10.810623 5.529073 3.993056 0.000000 \n", "75% 16.315435 7.801169 6.250000 7.216878 \n", "max 31.491833 14.433757 12.500000 14.433757 \n", "\n", " seasonality_strength seasonality_detected \n", "count 4113.000000 4113.000000 \n", "mean 25.329004 0.380501 \n", "std 21.281254 0.485569 \n", "min 0.000000 0.000000 \n", "25% 0.000000 0.000000 \n", "50% 24.742268 0.000000 \n", "75% 45.283019 1.000000 \n", "max 64.864865 1.000000 \n", "\n", "[8 rows x 44 columns]" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sales_avg_1msales_avg_3msales_avg_6msales_avg_12msales_recent_vs_previoussales_mom_changesales_yoy_changesales_maxsales_minsales_range...trend_r2trend_directiontrend_consecutive_downtrend_consecutive_upvolatility_cvvolatility_stdvolatility_madvolatility_recent_stdseasonality_strengthseasonality_detected
count4113.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.000000...3083.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.0000004113.000000
mean50.20970149.87033049.83436750.0358970.5932893.1635461.50498457.12375443.17712113.946633...0.0697130.0160470.1220520.17554110.7014805.2509564.1964524.00845225.3290040.380501
std8.9750167.1551926.3997776.11269711.27863819.97885018.4207896.5936466.8687279.709328...0.1144270.8593930.3376250.3930518.2578643.9928133.6582685.17353121.2812540.485569
min37.50000037.50000037.50000037.500000-40.000000-40.000000-40.00000037.50000037.5000000.000000...0.000000-1.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
25%50.00000045.83333345.83333346.4285710.0000000.0000000.00000050.00000037.5000000.000000...0.005870-1.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
50%50.00000050.00000050.00000050.0000000.0000000.0000000.00000062.50000037.50000012.500000...0.0303030.0000000.0000000.00000010.8106235.5290733.9930560.00000024.7422680.000000
75%62.50000054.16666752.08333353.1250000.0000000.0000000.00000062.50000050.00000025.000000...0.0853721.0000000.0000000.00000016.3154357.8011696.2500007.21687845.2830191.000000
max62.50000062.50000062.50000062.50000066.66666766.66666766.66666762.50000062.50000025.000000...1.0000001.0000002.0000002.00000031.49183314.43375712.50000014.43375764.8648651.000000
\n", "

8 rows × 44 columns

\n", "
" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. 데이터 전처리" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:53.571169Z", "start_time": "2025-12-01T09:58:53.553684Z" } }, "source": [ "# 카테고리 변수 인코딩\n", "label_encoders = {}\n", "\n", "if 'context_industry' in X.columns:\n", " le = LabelEncoder()\n", " X['context_industry'] = le.fit_transform(X['context_industry'].astype(str))\n", " label_encoders['context_industry'] = le\n", "\n", "# 결측치 처리\n", "X = X.fillna(X.median())\n", "\n", "print(\"전처리 완료\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "전처리 완료\n" ] } ], "execution_count": 9 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:55.173890Z", "start_time": "2025-12-01T09:58:55.163015Z" } }, "source": [ "# 데이터 분할\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, test_size=0.25, random_state=42, stratify=y\n", ")\n", "\n", "print(f\"Train: {X_train.shape}, Test: {X_test.shape}\")\n", "print(f\"Train 폐업 비율: {y_train.mean():.2%}\")\n", "print(f\"Test 폐업 비율: {y_test.mean():.2%}\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train: (3084, 45), Test: (1029, 45)\n", "Train 폐업 비율: 2.98%\n", "Test 폐업 비율: 3.01%\n" ] } ], "execution_count": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. 클래스 불균형 처리 (SMOTE)\n", "\n", "**문제**: 폐업 매장(3%)이 영업 매장(97%)보다 훨씬 적음 \n", "**해결**: SMOTE로 소수 클래스 증강" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:56.780558Z", "start_time": "2025-12-01T09:58:56.722913Z" } }, "source": [ "print(\"SMOTE 적용 전:\")\n", "print(y_train.value_counts())\n", "print(f\"폐업 비율: {y_train.mean():.2%}\")\n", "\n", "# SMOTE 적용\n", "smote = SMOTE(random_state=42)\n", "X_train_balanced, y_train_balanced = smote.fit_resample(X_train, y_train)\n", "\n", "print(\"\\nSMOTE 적용 후:\")\n", "print(y_train_balanced.value_counts())\n", "print(f\"폐업 비율: {y_train_balanced.mean():.2%}\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SMOTE 적용 전:\n", "0 2992\n", "1 92\n", "Name: count, dtype: int64\n", "폐업 비율: 2.98%\n", "\n", "SMOTE 적용 후:\n", "0 2992\n", "1 2992\n", "Name: count, dtype: int64\n", "폐업 비율: 50.00%\n" ] } ], "execution_count": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. 모델 학습" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:58:59.813873Z", "start_time": "2025-12-01T09:58:59.512221Z" } }, "source": [ "# XGBoost 학습\n", "print(\"XGBoost 학습 중...\")\n", "xgb_model = xgb.XGBClassifier(\n", " max_depth=6,\n", " learning_rate=0.1,\n", " n_estimators=200,\n", " random_state=42,\n", " eval_metric='logloss'\n", ")\n", "xgb_model.fit(X_train_balanced, y_train_balanced)\n", "print(\"✓ XGBoost 학습 완료\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "XGBoost 학습 중...\n", "✓ XGBoost 학습 완료\n" ] } ], "execution_count": 12 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:59:01.876182Z", "start_time": "2025-12-01T09:59:01.121174Z" } }, "source": [ "# LightGBM 학습\n", "print(\"LightGBM 학습 중...\")\n", "lgb_model = lgb.LGBMClassifier(\n", " max_depth=6,\n", " learning_rate=0.1,\n", " n_estimators=200,\n", " random_state=42,\n", " verbose=-1\n", ")\n", "lgb_model.fit(X_train_balanced, y_train_balanced)\n", "print(\"✓ LightGBM 학습 완료\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LightGBM 학습 중...\n", "✓ LightGBM 학습 완료\n" ] } ], "execution_count": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7. 모델 평가" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:59:06.600643Z", "start_time": "2025-12-01T09:59:06.578801Z" } }, "source": [ "# 예측\n", "xgb_pred = xgb_model.predict_proba(X_test)[:, 1]\n", "lgb_pred = lgb_model.predict_proba(X_test)[:, 1]\n", "\n", "# 앙상블\n", "ensemble_pred = 0.5 * xgb_pred + 0.5 * lgb_pred\n", "ensemble_pred_binary = (ensemble_pred > 0.5).astype(int)\n", "\n", "# 평가 지표\n", "accuracy = accuracy_score(y_test, ensemble_pred_binary)\n", "precision = precision_score(y_test, ensemble_pred_binary, zero_division=0)\n", "recall = recall_score(y_test, ensemble_pred_binary, zero_division=0)\n", "f1 = f1_score(y_test, ensemble_pred_binary, zero_division=0)\n", "auc = roc_auc_score(y_test, ensemble_pred)\n", "\n", "print(\"=\" * 70)\n", "print(\"앙상블 모델 성능 (Test Set)\")\n", "print(\"=\" * 70)\n", "print(f\"Accuracy: {accuracy:.4f} ({accuracy * 100:.1f}%)\")\n", "print(f\"Precision: {precision:.4f} ({precision * 100:.1f}%)\")\n", "print(f\"Recall: {recall:.4f} ({recall * 100:.1f}%)\")\n", "print(f\"F1-Score: {f1:.4f}\")\n", "print(f\"AUC-ROC: {auc:.4f}\")\n", "print(\"=\" * 70)" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "======================================================================\n", "앙상블 모델 성능 (Test Set)\n", "======================================================================\n", "Accuracy: 0.9679 (96.8%)\n", "Precision: 0.0000 (0.0%)\n", "Recall: 0.0000 (0.0%)\n", "F1-Score: 0.0000\n", "AUC-ROC: 0.5897\n", "======================================================================\n" ] } ], "execution_count": 14 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:59:10.068648Z", "start_time": "2025-12-01T09:59:10.009485Z" } }, "source": [ "# 혼동 행렬\n", "cm = confusion_matrix(y_test, ensemble_pred_binary)\n", "\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',\n", " xticklabels=['영업', '폐업'], yticklabels=['영업', '폐업'])\n", "plt.title('혼동 행렬 (Confusion Matrix)')\n", "plt.ylabel('실제 (Actual)')\n", "plt.xlabel('예측 (Predicted)')\n", "plt.show()\n", "\n", "print(\"\\n혼동 행렬 해석:\")\n", "print(f\"True Negative (TN): {cm[0, 0]} - 영업 중인 매장을 영업으로 정확히 예측\")\n", "print(f\"False Positive (FP): {cm[0, 1]} - 영업 중인 매장을 폐업으로 오판\")\n", "print(f\"False Negative (FN): {cm[1, 0]} - 폐업 매장을 영업으로 오판 (놓침!)\")\n", "print(f\"True Positive (TP): {cm[1, 1]} - 폐업 매장을 폐업으로 정확히 예측\")" ], "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "혼동 행렬 해석:\n", "True Negative (TN): 996 - 영업 중인 매장을 영업으로 정확히 예측\n", "False Positive (FP): 2 - 영업 중인 매장을 폐업으로 오판\n", "False Negative (FN): 31 - 폐업 매장을 영업으로 오판 (놓침!)\n", "True Positive (TP): 0 - 폐업 매장을 폐업으로 정확히 예측\n" ] } ], "execution_count": 15 }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:59:12.035710Z", "start_time": "2025-12-01T09:59:12.026684Z" } }, "source": [ "# 분류 리포트\n", "print(\"\\n분류 리포트:\")\n", "print(classification_report(y_test, ensemble_pred_binary,\n", " target_names=['영업', '폐업']))" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "분류 리포트:\n", " precision recall f1-score support\n", "\n", " 영업 0.97 1.00 0.98 998\n", " 폐업 0.00 0.00 0.00 31\n", "\n", " accuracy 0.97 1029\n", " macro avg 0.48 0.50 0.49 1029\n", "weighted avg 0.94 0.97 0.95 1029\n", "\n" ] } ], "execution_count": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8. 특징 중요도 분석" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:59:15.593569Z", "start_time": "2025-12-01T09:59:15.509916Z" } }, "source": [ "# XGBoost 특징 중요도\n", "feature_importance = pd.DataFrame({\n", " 'feature': X.columns,\n", " 'importance': xgb_model.feature_importances_\n", "}).sort_values('importance', ascending=False).head(20)\n", "\n", "plt.figure(figsize=(10, 8))\n", "plt.barh(feature_importance['feature'], feature_importance['importance'])\n", "plt.xlabel('중요도')\n", "plt.title('Top 20 특징 중요도 (XGBoost)')\n", "plt.gca().invert_yaxis()\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "print(\"\\nTop 10 중요한 특징:\")\n", "print(feature_importance.head(10))" ], "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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z+66666ACJwdO3a0r7766qrXQ2gGAAAAgKtH6E4DRYsWte+++y4tVgUAAAAAyED8HrpjYmJs0KBBVr16datRo4b16dPHPb927Vp78MEHrWbNmu7r+vXr3fPnzp2zTp06WcOGDe22226z5557zmJjY91rqvDq+WrVqtl9991nO3bscM+fPHnSXnjhBatXr57VrVvXLXPs2LH4rtt33323vfjii+5rpUqV7JlnnrG4uDj3+rvvvmstWrSwKlWquHZs3br1kn3Ys2ePe11GjBhh8+bNszfeeMPtz4YNG9w+TZo0Kf7958+fd6/t3r070WMSFRXl2nDHHXdYnTp17PXXX7/o9aSOzdNPP20//fST2z+tPyIiwj3/zTffWNOmTd37VQn/448/4te1dOlStw69/84773TvTWwfktuurFmzxh566CH3e2zcuLFrBxBogoJ4ZIZjwO/a/7+DQH9wjvj/dxDoD84R//8OAv3BOeL/30FQgDxSI6v5mULfypUrbcmSJZYjRw4XRCMjI61Xr142YcIEF4IXL15svXv3tq+//tqyZs1qY8eOtfz589uhQ4esXbt2tnz5cheoFaxffvlla9CggQvCBQoUcNvQcx6Pxy0fFBRkw4YNcw+tR86cOeNC+sCBA23v3r3WpEkT69atm5UqVcoFyb///e929uxZF37feuutS0LwhXQB4cSJE3bTTTe5iwOi8dha5qmnnooPr8WKFbMSJUokuo6XXnrJQkJCXPVcAX3WrFnuIckdGz2nUN2hQwe799573ft///13t6/vv/++3XDDDe6r2jh9+nTbvn27C/e6IKCLBtHR0S7w6+JDwn1Ibru6gNGjRw93PHWhQMdQ2wACSWhoiL+bgGsoLCwvxxucI+BzBPytQUDwe+jOlSuXC3tbtmyxqlWrWunSpe2LL76wW265xSpXruzeo8qpgqMC+Y033hgfpsPCwqxkyZLxFd3cuXPbpk2brFatWvGBVpX0uXPn2g8//OC2JX379rX69evb6NGj3c9anyq6ovUXKVLEtUkU7r3trFChgn322WeXvY+qVqv6rACsIKvA6g3FCalqryC7bNkydxFCj7/+9a/xr+v55I5NQtqW3uN9rX379m6/dRFBr+kCg4675MmTxz0Sk9x2VfHW87Vr13avFS9e3K6//vrLPk6AL0VFRVtsrIeDnMHpirMCd2TkCftfhyWAcwR8joC/NfDp/zsCPnQr7GrSruHDh7vqateuXe3IkSO2YsWK+BAnp0+fdtXWggUL2pgxY1y4Vsjetm1b/HsmT55sEydOdIFalWtVZlUpVnVbAd3ruuuuc1+1vsTo/V6zZ8+2GTNmWLZs2ezUqVOuAn25smfP7kL2/PnzrWfPnq6q/9FHHyX6Xl1A0Pa9FxYS2r9/f5LHJrHQrferq/jChQvjn8uZM6c7xqpIJ1Vtv5zt6rVChQqlaj2APxHCMtfvmt83OEfA5wj4W4NA4PfQrYDZsmVL91DFVJVYdfPWbODjx4+/5P1vvvmmHT161D799FPLkiWLdenSJf61cuXKuXHIel3hVjOIK3ireqxu06Ghoe59Cpzabnh4uO3cuTPJtqmKq2quKsIK+xoz/vHHH1/RfjZv3tztl7q+6wJAUmFXFwTUFV77kFjwVrhN6tgkRu9XF/z+/fsn+poCc2rXk9R2d+3aZb/88kuq1gMAAAAAmYnfJ1JTtVUBUxOX5c2b143ZVjfm//znP26st55XaP7tt9/cJGqqNuurKtgaS3z48GG3Hj2nqrcCq6rSWpdCub5XV2iNqdZ7NH771VdftQceeMC9nhxVcrVtbVNfL5yALKXKtgK7t+2iLtxqs0JrUl3LRe3VuGi9T+3VwzuRmaiKn9Sx8W5bIViv6VhoW19++aV7j55TG7wToDVq1MhV33/++Wf3mvbTO/lcwn1IbruaPE3j1H/88Uf3mqrfyV3MAAAAAIDMwu+hWwHxkUcecTNiawIwdS+vWLGiq2greGp8tsKhJgATvVehTrOQa7Zujb8WBcxRo0a55/VQuH700Ufda5pgTT+ryqwArkCpLu0p0fjrtm3buiq8xj4fP348Vfuk969bt85VhhVEJTg42E2oprHR6vqeHE2kpgq0unKrQn5hN3hVyZM6NqKq9ueff+720zuGXNV6Vdn1fm17wYIF7r3ly5d3M5U///zz7vir3d7Z2RPuQ3Lb1RhudfnXDPB6Tb0M1IsAAAAAADK7oDjvvbFwTWZqV8Vd48SRuFaTV9janVEcHqSZCkXz2fyedd1EajExTKSW0WlKjvDwvBYRwURq4BwBnyPgbw2uzf87An5Md2agKrxmUf/kk09cJdpr9erV7lZbF/rggw/c2HQAAAAAQPpH6L4GdAs0dRm//fbb7cEHH4x/XmOhV61adS2aAAAAAADwA0L3NeCdnR0AAAAAkLn4fSI1AAAAAAAyKkI3AAAAAAA+QvdyBJRS4SF2+tx/720OpIUyhfJwIAEAAOA3hG4ElDGtKvm7CciAYmI95vFwd0QAAABce4RuBBTdSxlISmhoyBWdIwrchG4AAAD4A6EbAXdPc4/H361AIAoK+u/X2FiPxVG0BgAAQDrBRGoAAAAAAPgIoRsAAAAAAB8hdAMAAAAA4COM6UZACQ4OtmAuBSEZWbIkfoIwWRoAAAACEaEbATc7NXAl54huC3bs6ClmKQcAAEBAIXQjoPSftc427jvu72YgnSlTKI+Nb1vFgoODCN0AAAAIKIRuBJQdEdGEbgAAAAAZBqNnAQAAAADwEUI3AAAAAAA+QugGAAAAAMBHCN0AAAAAAPgIoRsAAAAAAB8hdOOylStXzg4cOMCRAwAAAIAUELrTyKpVq6xZs2YXPdetWzdbsmSJpWdvvvmmDRs2zN/NAAAAAIB0ift0+9Bbb73ly9UDAAAAAAJchql0//nnn/bEE09YrVq17O6777a3337bYmNjXaX2scces3bt2lnNmjXtnnvusW+++SZ+uf3791vXrl3tjjvucMt99tln8a81aNDAxo4da/fee6+9/vrrdu7cOevUqZM1bNjQbrvtNnvuuefcNn755Rd76qmnbPv27VajRg0bNWqUW75jx4721Vdfue+1rNahddauXduefvrp+C7ae/bssapVq8Zvq1KlSm47Z8+eTbaL92uvvebeX61aNRsxYoSNHz/e7V/lypVt8ODBFhcX594bERFhvXv3tjp16tidd97p2udd9+zZs61169bWr18/91qVKlVcO+Tdd9+1qVOn2syZM91+LVq0KH777733njVp0sS9v02bNnbkyBH3/Jo1a6xp06bu+Ghf165dm6a/ZwAAAABITzJEpVuBtkuXLvboo4/a5MmTLTIy0gXp0NBQ93rWrFld1Tl//vyuG7gC8sKFC61QoUIujCo86nUF97Zt27oAfOONN7pltcwXX3xhOXLkMI/H4wKpnjt06JAL8suXL7d69erZpEmTbPjw4TZv3rxE2zhlyhT79ddf7fPPP7eQkBD3fm17+vTp8ftw++23u3afOXPGtWn16tVWt27dJPe7bNmy7v0K+61atbLRo0e7EK0Qf//997v9vP76661v374uiI8ZM8ZO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7aeffopfTu9Xm1u2bGm33Xabe9/27dvda7///ru1atXKqlWrZvXq1bMFCxa45z0ej02YMMEtW7t2bXv22Wft5MmT7rW4uDj75z//6fZZ7WjevLnt2rXLBehmzZpd1Gbt8549e+zdd9+1qVOn2syZM90yixYtcq+XK1fOjhw5YnPmzHH7c6EhQ4a47cjWrVutY8eObv/Ufu+xT003fa1f2/HS98OHD7e7777bqlevbn379o0/jgAAAACQWV3z0D1o0CAXInv27OkCZWhoqAueCtDffPON1a9f35YtW2bvv/++C8z6vkSJEjZmzJj4dZw5c8YeeeQR9/5JkybZlClT3HMKrgp7FStWdMsp3CsAJuftt992wf+zzz6zH3/80V555RXLli2brVmzxl577TXXfXvlypX21FNPWbdu3VzY9AoLC3PbXrp0qV1//fUu5IqW0Xa1Pj1XtWpV97zCsfZZz3333Xd2+vRpF5rl888/d48PPvjAvUfP582bN9m2P/7449a5c2d3EULLNG7c+KLXFeB1AWD37t3xFxh0zJo2beqOV/fu3e3vf/+727+RI0da//797dixY3aldDHh66+/dvt26tQpdxxwdYKCeFx4DDgmnA+p+TfBecJ5wjnCOXC1fz/5HOEc4hzhHAi6jM+LdNG9PHv27K5S67Vw4UIXJAsVKuR+bt++vavIehUtWtQqV67svleVVmFbIe/o0aO2bds2mz59ugUHB1uBAgXspptush07diS5bQXzV1991YV/KVmypPuqYKztli5d2v2siwEK8//+97/tgQcecM+pzeHh4e77SpUque1Lrly57I8//rDIyEgrXLjwRful/ciXL5/7WVVoVb697VCoV3iXC5e7UiEhIS54a7tPPvmkuzhQoUIFK1iwoK1du9Zy5szpKtPe9t94443uAoR6CFyJv/71r5YlSxa33U6dOtkLL7xw1fuQmYWGhvi7CQEpLCz5i1EA5wn4LAF/b3At8H8SpFZAhO6E9u/fb1999VV8FVihWlXhxARdcHlh3759LgQrcKeWuqMXKVIk0TbccccdFz2nQHzgwIEU26Fu45MnT3bh/JZbbnHV9/Lly7t1Dh482IYOHereFxsbGx/ak2rH1WrRooXrJaDQre7y+tm7f7owoG7uXqp+p9UEbNov75AAXJmoqGiLjfVw+P5H/8T0xy0y8oTFxXFYkDjOE6SEcwScI7hafI4g4bmQLkO3Ktx9+vSxDh06XPZyCnoaO53a4K1lFEBV/U34/MGDBy96Tu+7/fbbU1znddddZwMHDnTjzseNG+fGUatrudap51U1T6od3gr+hbQ/V0o9AdQlfv369bZ69WrXjdy7PV0ImDVrVqrXdTnt0MUJb9UeV45wmfgx4bggNf92OE/AOYKrwecIOEeQrm8Zpu7kGmesCnZiQU5jjjWe+88//4wfi7xx48YU16tu5wp6GmetKrKq47/99luyy9xzzz02fvx4V+FVe9QujWu+7777XBu87fz+++9t06ZNbmK0lGiCsvPnz7vqt7q4q8u1aCy72nbo0CH3s7rEb9682X1/77332jvvvOOCt+jigUK/AryOg9apSrS6iGvdXjly5HCTqml/9UhI277//vvdbdrUdnV9F4V7dYdX9Vu/Az00EVxSY7rVDv0O1JtAY/DVzT4hde3XsdJ6VelX13YAAAAAyMz8Ero14/e6devcbOWabCyhunXrujHB3lnINZN3Yu9LSNVtBWgFUy2nceEpVWc1oZvGMiuYqqu1KtEK+apGa5IytUMzqCsQa9K1/Pnzp9iOL774wk0qpjbMnz/fnnvuOfe8ZjRX8FUFX+vUmG5v6G7btq01bNjQvablNL5bs3+XKVPG2rVr52ZP1wzjP//8swvAXpo8Te9Te+fOnZtoe9SlXIHa27XcG9a1P5q8Tfut9moW98SCu+g9qvKrDQ899JAL1t6LCV4an64u+bq4oHbr+AEAAABAZhYUp9IkcJV0yzDNgn7hBYEr0WryClu7M23GladXFYrms/k967ox3TExjOm+cMxMeHhei4hgTDeSxnmClHCOgHMEV4vPESQ8F9LlmG5fUDdxVZovpAnGEhtfndmpZ4G3C7y3Ct+7d2+/tgkAAAAA0qNME7p1r2/dyxop0zhvAAAAAMDVyzShG761ZcsWDjEAAAAABMJEagAAAAAAZAaEbgAAAAAAfITQDQAAAACAjzCmGwGlVHiInT6X+L3CM4syhfL4uwkAAAAA0gihGwFlTKtK/m5CQIiJ9ZjHE+fvZgAAAAC4SoRuBJSoqGh/NyEgKHATugEAAID0j9CNgOLxqMLr71YAAAAAQNpgIjUAAAAAAHyE0A0AAAAAgI/QvRwBJTg42IIz0aUgxm4DAAAAGRuhGwElNDTEMtss5ceOnmLSNAAAACCDInQjoPSftc427jtumeV+3OPbVrHg4CBCNwAAAJBBEboRUHZERGea0A0AAAAg48tEo2cBAAAAALi2CN0AAAAAAPgIoRsAAAAAAB8hdAMAAAAA4COEbgAAAAAAfITQDQAAAACAj2TI0D1gwACbNm3aVa+nXLlyduTIkTRpU2azatUqa9asmb+bAQAAAAB+lSFD95WG83379tldd92V6HsfeOAB27Rpk/t+9uzZ1qVLF8usFyYI1AAAAACQOllT+b5MoWjRovbdd98l+tqcOXOueXsAAAAAAOlbQIfuCRMm2Pbt2+3111+Pf+7xxx+3du3a2fXXX28vv/yy7dixwwoUKGCdOnWy1q1bX7KO5cuX2/jx4+3PP/+0kJAQ69+/v9177702YsQImzdvnmXJksXeeecdmzp1qoWGhlrz5s3t559/vmQ9DRo0cOvZs2ePDR8+3M6dO2c1atSwp556ynLkyGFfffWV/fOf/4x/f7du3ezuu++2hx566JJ1vfnmm7ZlyxY7efKk7d+/377++ms7evSo258VK1ZYtmzZ7OGHH3bV9KCgIDtx4oS9+uqr7oLA2bNn7eabb7b33nvPPB6PTZo0yVXe9XydOnVsyJAhlidPHreNdevWuXVt2LDBvf6Pf/zDHnnkkUT3/dZbb72knWvWrLEXX3zRDhw4YPnz57cxY8ZY1qxZ3T6fOnXK7X/Lli1d1TwqKsq1X8c7ODjYihcvfpW//cwlKMjfLUg/x4hjBc4T8FkC/t7An/g/CbxS+//SgA7dLVq0sPvvv98FvNy5c9vhw4ddF+8qVaq411566SW78847XaBWGFelunbt2heto3Llyvbhhx+6gLlo0SIXmBW6Bw0a5MLsTTfd5AK7KFCn5L777rPTp0+7oPz222+757yBMyIiwsLDwy06Otp1wR45cmSS61HIVpAuUqSI+1ntKlSokH3//fdufR06dLBKlSpZrVq1XEhWwFawz5Url23dutUtM3PmTLcdVeFz5sxp/fr1cwG6V69e7vWYmBj3nPZR79HFC4XuxPY9MWq/LnC0b9/eHXsF7rCwMBf01V4Fdy/9LnRRQxcGzp8/b7NmzXIPpCw0NITDdBnCwvJyvMB5gqvGZwk4R8DnCK6VgA7dJUqUcFVdBbmmTZvawoULrXHjxq6aque9469vuOEGFw7nz59/SehWEPRSiFUwTmuqkN9xxx0uiCssL1261KpWreoq8EkpW7ZsfOBWONayy5Ytc8G2YMGC7sLAypUrrXr16rZgwQIXxnXhwTvBm+h4dOzY0fLly+d+btOmjesd4FWqVCkrX768+17r0cWAy6HtKeAfP37cChcunOT7YmNj49uvqr8ef/3rXy9rW5lZVFS0xcZ6/N2MdHElUf9Jjow8YXFx/m4NAhXnCThHwOcI+FuDa/3/jnQdukUVbYVphe4vv/zSnnvuOVu9erXrXn4h/ayQmtAvv/xi48aNc92rFQZ9RRX5jz76yIXuxYsXu9CcWpGRka46rH300s+qqusiQVxcnF133XWXLKeu6YMHD7ahQ4fGh19V2hOjbuqXa9SoUTZx4kR3oUNd13v37u0uhCSkNmr9yV1kQPIIkZd3rDhe4DzB1eKzBJwj4HME10rAh26F19GjR9uvv/7qumSra/nOnTtdmE4YQIsVK3bJ8n369HHdqRs2bOhu/6Xu2r6gqrsC8K5du1wlXmOrU0uBWmOvFda91ewLw7fCtNqeMHirO/rAgQOtfv365gsal60u5urer/0ZO3asu4CRWPvV/V2/H4I3AAAAAKSjW4ap63TdunXdBGiqJquiqp812ZnCrarAf/zxh33yySeuKp6QulTrofdp0rULZc+e3Xbv3u1eU7BNLVXMFfI1mZp3OY211sRpqjrfcsstlxU+Fbjvuecee+211+zMmTPx1WO1Ta9pvZrETOFXbf3999/dtnUf7ClTptihQ4fcMnp98+bNqdpmavZd69JrGg+v/dFX7/5rjLe2p9fVRnWv10RzapcemrwNAAAAADK7gA/d3ntkaxZzhW7RmGd1e9bEYKpcd+/e3fr27WvVqlW7ZFl1R1dgVTV4yZIlF43x1szbmuFbVeoff/wx1e1RwFQ3bi2nicu8NPO5xjVfTtdyrxdeeMGFWG9X7h49ergJ1URBXpVkhW9dcNAEbArLrVq1snr16rku7ToOGtOd2tCdmn3Xfbx13LTujRs3ujaJxtPXrFnTtUcTyHknUtOFCI2p13FQl3kAAAAAyOyC4pTekCY0q7kmLNNEanSzvjKtJq+wtTv/e7Eho6tQNJ/N71nXTaQWE8NEainRtATh4XktIoKJ1MB5givHZwk4R3C1+BxBwnMh3Y/pTg9UhZbp06e7Krc3cGtW8oSzqet2XpppPZCkl3YCAAAAQHpD6E4DGlOue1nrHtbvvvvu/x/crFndfbQDXXppJwAAAACkN4TuNFC6dGlCKwAAAAAgfU6kBgAAAABAekToBgAAAADAR+hejoBSKjzETp9L/T3T07MyhfL4uwkAAAAAfIzQjYAyplUly0xiYj3m8XDXPgAAACCjInQjoOie1ZmJAjehGwAAAMi4CN0IuHue/++25wAAAACQ7jGRGgAAAAAAPkLoBgAAAADARwjdAAAAAAD4CGO6EVCCg4MtOJNcCmISNQAAACDjI3QjoISGhlhmul3YsaOnmL0cAAAAyMAI3Qgo/Wets437jltGV6ZQHhvftooFBwcRugEAAIAMjNCNgLIjIjpThG4AAAAAmUMmGT0LAAAAAMC1R+gGAAAAAMBHCN0AAAAAAPgIoRsAAAAAAB8hdAMAAAAA4COE7gxi9uzZ1qVLl8termPHjvbVV1/5pE0AAAAAkNkRun1owIABNm3aNF9uAgAAAAAQwAjdAAAAAAD4CKHbR0aMGGHz5s2zN954w2rUqGEbNmxwX0ePHm133XWX/fDDD+59M2bMsEaNGlmtWrWsa9eudvjw4fju4q1bt7Z+/frZnXfeaVWqVLGxY8fGr3/v3r3u/TVr1rQ6derYxx9/nGx71IW8YcOGVq1aNbvvvvtsx44dl7zn3Llz9vrrr1uDBg2sdu3a9vTTT9uBAwfca3v27LGqVava4MGDXfu13aFDh7plxOPx2IQJE+KXffbZZ+3kyZNpekwBAAAAIL0hdPvIoEGDrFmzZtazZ09btWqVhYaGuhCqAP3NN99Y/fr1bdmyZfb++++7wKzvS5QoYWPGjIlfx5kzZ+yRRx5x7580aZJNmTLFPRcXF2d9+/a1ihUruuUU7qtXr55se1544QUbOHCgrVmzxt555x0rWLDgJe/R+n/99Vf7/PPP3UWBsmXLWu/evd32RAFb7fn2229twYIF7r3Tp093r82cOdPt55w5c+y7776z06dP29SpU9P8uGZEQUE8UnsMOF6cK5wnnANp8ZnJZwnnEecI5wCfI5wDQWl0DFIjq++iBBLKnj27q3Z7LVy40FWzCxUq5H5u3769m9jMq2jRola5cmX3vSrLCr+nTp2yo0eP2rZt21zgDQ4OtgIFCthNN92UaPXaK3fu3LZp0yZXUVe4T4wCs6rp+fPndz93797d3nvvvfhqd7Zs2ax8+fLu++uuu84F8Pnz59ujjz7q9kVtz5cvn3u9TZs2rvKN5IWGhnCILlNYWF6OGThPcNX4LAHnCPgcwbVC6Paj/fv3u27f3oqwQrUqxIkJuuAyyr59+yw8PNwF7tSaPHmyTZw40VXY1b28V69eLjgnbM/1118f/3OWLFncBQE9770wcCG1wdsdXu9R13N1OZfY2Fj3OpIXFRVtsbEeDlMq6J+A/pMcGXnC/tf5AuA8wWXjswScI7hafI4g4bmQEkK3HynI9unTxzp06HDZyynsahx1aoN3uXLl3PhyVcnV5V2zqj/zzDOXrPfgwYPxXc9jYmLcdooVK2bnz5+/ZJ2qgHtDupZV93WFelweAuTlHy+OGThPcLX4LAHnCPgcwbXCmG4fdyffvXu3q2ArICfUtGlTN577zz//jB8zvXHjxhTXq27nCrsag62Ksqrjv/32W5Lv13rVHV1tUBfxvHnzuip2QqqAq0u4xp4rZOt7dW/3Vrn1nLqwa38UuDUeXZPAicavqz2HDh1yP6sb/ObNmy/jaAEAAABAxkOl24datmxpw4YNc7N9P/XUU5e8XrduXRdSNQt5VFSUG0utsdAVKlRIdr2qbo8fP95Njqau6YULF052IjWF7VGjRrkx3Qromgld47AT0mzlGtOtiwEK81rnK6+8Et+1XWFb2/z9998tZ86cbjx6ixYt3GutWrWyY8eOuaq9QntYWJh17tw5fgw4AAAAAGRGQXHeqamBZOiWYc2bN7eff/7Zp8ep1eQVtnZnVIb/XVQoms/m96zrxnTHxDCmOzV07Sc8PK9FRDCmG5wnuHJ8loBzBFeLzxEkPBdSQqU7g1F3dlWdL6TbkDHWGgAAAACuPUJ3BqPbgel+2QAAAAAA/2MiNaRK8eLFfd61HAAAAAAyGkI3AAAAAAA+QugGAAAAAMBHCN0AAAAAAPgIE6khoJQKD7HT52ItoytTKI+/mwAAAADgGiB0I6CMaVXJMouYWI95PHH+bgYAAAAAHyJ0I6BERUVbZqHATegGAAAAMjZCNwKKx6Pqr79bAQAAAABpg4nUAAAAAADwEUI3AAAAAAA+QvdyBJTg4GALzgSXghjPDQAAAGQOhG4ElNDQEMssM5cfO3qKidQAAACADI7QjYDSf9Y627jvuGX0e3SPb1vFgoODCN0AAABABkfoRkDZERGd4UM3AAAAgMwjE4yeBQAAAADAPwjdAAAAAAD4CKEbAAAAAAAfIXQDAAAAAOAjhG4AAAAAAHyE0A0AAAAAgI8QujOYcuXK2YEDB/zdDAAAAABAZgndq1atsmbNml30XLdu3WzJkiWWnr355ps2bNgwfzcDAAAAAJCErJZJvfXWW/5uAgAAAAAgg7smofvPP/+0l156yX799VcLCQmx1q1bW+fOnW3SpEn2008/2ZkzZ+yPP/6w/Pnz2zPPPGN33323W27//v02dOhQW79+veXOndtVpx966CH3WoMGDaxp06a2ePFiu+eee6x79+7u9Z07d9rRo0etcePGbpsbNmywp556yk6dOmU1atSwli1b2oABA6xjx47WoUMHu/fee+3cuXM2ceJE+/LLL+3s2bNWpUoVGzx4sBUpUsT27Nlj999/v3uvtqU2VatWzbU9R44cSXbx7tKliy1atMgiIiLcNvPkyWMLFiywgwcPuqr78OHDLSgoyL0+YsQIW7NmjWXNmtW1p3fv3m7ds2fPtk8++cRKlixpa9eutWPHjtkjjzxiffv2tXfffdemTp1qHo/H5s+f79anfZb33nvPli5d6tp600032eTJk+26665z23jxxRdd93Md6zFjxrh9SYy2od/XoUOH3HEbO3asa2/t2rVt1qxZVrp0afc+/f60zrlz59rJkyfd99q2fgdSoEAB++CDD9wxwaWCgjgql3usOGbgPMHV4LMEnCO4WnyOwCu1/y/1eehWoFUAffTRR134i4yMtK5du1poaOh/G5A1q6s6KwSqG7gC8sKFC61QoUIufDZp0sS9ruDetm1bq1q1qt14441uWS3zxRdfuICq8KlgqOcUFNu1a2fLly+3evXquYCsUDpv3rxE2zhlyhQXMD///HN3UUDv17anT58evw+33367a7cuEKhNq1evtrp16ya532XLlnXv3759u7Vq1cpGjx7tQrQ3xGs/r7/+ehduK1eu7ALw6dOn3c/e7Yu2p6A9atQoF5ofe+wxd4Hh8ccft+joaIuKirLnn3/+om2XL1/eXYAIDg6Ov1jw8MMP28iRI91xad++vR0+fNgd+6ToooMCs9avdSlUa1ld4NDFgx49erj36Zi2aNHCff/OO++4369+f8ePH3f7PX78eAJ3EkJDQ5L+h4MkhYXl5eggRZwn4BzB1eJzBJwj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tLp169ratWutYsWK7rh6LV682B555JFE90P7rn0YPXq0248ffvjBNm/e7H5f+p3UqVPHPvroI/fed99916ZOnWozZ850y3j3eevWra5NaluTJk3cOgAAAAAgM0vTSrcCrcYpP/roozZ58mSLjIx0QTM0NPS/G8ua1VWd8+fP70KiAvLChQutUKFC1rt3bxfU9LqCe9u2bV0AvvHGG92yWuaLL76wHDlymMfjccFYzx06dMgFw+XLl1u9evVs0qRJNnz4cJs3b16ibZwyZYr9+uuv9vnnn1tISIh7v7Y9ffr0+H24/fbbXbvPnDnj2rR69WoXZBNSGNc+9OjRw+6//36LiIiwMWPGxL++bNkye//99+3jjz+2sLAwdxFAr7/yyitJHsMHHnjABe++fftaUFCQa2u2bNnsr3/9q/3++++uS7fWecMNN7ivgwYNim97VFSUtW/f3l566SULDg62+vXru+P7+OOPu9cVjnUxISknT560O++80/r162dZsmRx+z9t2jTLmTOnrVu3zq37wQcfdOuLjo5223v++efdsnpv9+7d7dlnn3UXQ9avX29PPvmk26Z+T+lVUJC/W4CEvwt+J0gO5wlSwjkCzhFcLT5H4JXa/5emaehW0FLYU2AWhenOnTu7am+1atWsRIkSVqBAAfeaqqGqxP70009WpUoVVyVVF2sFTQVKVaEVdr2hWxVVBW7RNrzrUZgtWbKkC7ypMWfOnPjALgqK7733Xny1WwFX4V0Uym+66SYXMBOzYcMGy507twvK3v1VWxRGRYG3devW7nlRaFUlODkK/KpuK+RWrlzZXTxQoNdxUaW6cePG8cdE61Nl2luJv+666+yWW26JX1fz5s1dTwOF5PPnz9u///1ve+aZZ5Lcdvbs2d1x9lLY9lLo1+tHjhxx+5yQLg7o/eqlIOoloHbqGKlKnh6Fhob4uwlIRFhYXo4LUsR5As4RXC0+R8A5grSSpqFbXZmvv/76i57Tz95Am5ACs7pb79u3z06fPn1ROFPFuWzZsklWZFUx3rRpkwuA27Ztu+I2qqKrUKznveH4Qgq7ya0rsWUufF3d2tUVWxSmtZ/J0QUFhez58+fbrbfe6oL7v/71r/j1KYTrOS8FXQXhxKjSre7m6jmg7uNlypRJtr0J7dixwx3no0ePugsQCu7J7au6uutiiZeq394LEOlRVFS0xcZ6/N0M/I/+Keo/QJGRJywujsOCxHGeICWcI+AcwdXicwQJz4VrGroV6NTdO2EYK1asWKLvP3jwoBUtWtQtp8q1umMnF3K9VJlWEPz0009daL6cW29pW9puwYIF3c8xMTEu+KuNyYXK1O5vwtf79OljHTp0uKz1KnT//e9/d6FZ1eIiRYrEr09d6fv373/JMrt27brkOfUMUGV8wYIFbp+T61qemBdeeMGNR1d1Xr8X9UhIitpWvnx5mzVrlmUkhLvA/J3wewHnCfgsAX9v4G/8nwR+mUhNXYpVhdZ4aVV1FfQ0hrply5bu9b1797rX9Zpu4aUxyup2rsCrbtkaP6zgq9f1Xi2fmFOnTrlKuN577NixiyYnU9DUz3qPJldL6L777rMJEya4dmh5fa9u3JdTAfaqUKGCqzLPnTvXtfnEiRNun7w0sZnGc6vSLGrzxo0bU1xv6dKlXTX+5ZdfthYtWsQ/r9D85ZdfuknVtD21X136k6Mu5qqaf/fddy6AXw51q1dlXtvauXPnRRcldJxVPdcx1kPHUBdC1D6NuddDE9rp9wMAAAAAmVWahm51ddYEarNnz3YzXqvCq/HO3pm5VY3VRFwaz60JzCZOnOgq3Kqijh8/3gVITeSlCu+QIUOSnDVcM3BrkjZNbqbZx72VYLn55pvd+jW2WKE1Ib2/ePHiLhBrlm61SRObpabCnlCePHncrOz//Oc/3TZVnb5wvLPap9nPNSmbXlcA/vHHH1O1bh03XXi4MChrfLkmUlOXcc2GrgsIqmInp3r16i74ap8LFy58WfunKr3G46vbv36vF/ZYULuOHz/ufle66KAQrvHjuuCiLuaaHV6zxCd24QMAAAAAMougOJUxrwGF0wtnu8a1o/CsruEpTeIWCFpNXmFrd/p3HHiFovlsfs+6bkx3TAxjugOFrouFh+e1iAjGdIPzBHyWgL838B/+T4KE58I1HdOdkanSq7HkF1a51UU+kKmL9+7du+3nn3+2wYMHxz+vCx9ff/11/M+asO7DDz/0UysBAAAAIOMidKeSuojrkZ5ogjkFbnVH1+3EvNRFXQ8AAAAAQAYJ3T169LhWm8L/aBI7AAAAAEAGmUgNAAAAAAD8P0I3AAAAAAA+QugGAAAAAMBHmEgNAaVUeIidPuffe3uXKZTHr9sHAAAAkHEQuhFQxrSqZIEgJtZjHs81uYU9AAAAgAyM0I2AEhUVbYFAgZvQDQAAAOBqEboRUDweVZj93QoAAAAASBtMpAYAAAAAgI8QugEAAAAA8BG6lyOgBAcHW7CfLgUxjhsAAABAWiN0I6CEhob4dcbyY0dPMYEaAAAAgDRD6EZA6T9rnW3cd9wv9+Ye37aKBQcHEboBAAAApBlCNwLKjohov4RuAAAAAPAFJlIDAAAAAMBHCN0AAAAAAPgIoRsAAAAAAB8hdAMAAAAA4COEbgAAAAAAfITQDQAAAACAjxC6UzBgwACbNm1amh70cuXK2YEDBy57udmzZ1uXLl3StC0AAAAAAN8hdAMAAAAA4COEbgAAAAAAfCTThe6YmBgbNGiQVa9e3WrUqGF9+vSxc+fOWadOnaxhw4Z222232XPPPWexsbGXLOvxeGzChAnWoEEDq127tj377LN28uRJ99qaNWusadOmbnm9vnbt2mTbMWbMmPjt/eMf/7Djx4/HvzZjxgxr1KiR1apVy7p27WqHDx9OdB3Lly+3li1buv24//777dtvv3XP//zzz659cXFx8W2rUqWK20/ZsmWLNWvWLMm29e3b1+655x63jLYfHR1tp06dcj9v3749/n0//fST267oOPTr18+1Rd3n9dD32lZ6ExTEI1CPAb8f//8O0sOD88T/v4NAf3CO+P93EOgPzhH//w4C/cE54v/fQVCAPFIjq2UyS5cutZUrV9qSJUssR44ctnv3bsuaNauNHTvW8ufPb4cOHbJ27dq5QFuvXr2Llp05c6atWrXK5syZYzlz5nQhc+rUqdarVy8bOXKkW659+/YuJGudyVFY1TLnz5934f2NN96wwYMH27Jly+z999+3jz/+2MLCwmzUqFEuoL/yyisXLb9z504XjidPnmyVKlWyX3/91Tp37uyWu/XWW13A3rFjh5UuXdq+++47d8FA4VthfPXq1VanTp0k26Z2FChQwKKioqxbt242d+5ct28K4gsWLLAePXq4982bN89atGjhvn/nnXcsMjLSFi5c6C4gtGrVysaPH+/Cd3oSGhri7yYgBWFheTlGSBHnCThHcLX4HAHnCNJKpgvduXLlcpVbVWCrVq3qQqkoZIqCbsmSJS0iIuKSZRUoO3bsaPny5XM/t2nTxlW+JXfu3LZ161YXOAsXLpxiOypWrOhCvx6PP/64Pf/88/HbaN26tRUqVMj9rBCvbSak8Hvvvfda5cqV3c8K2vfdd599/fXX1r17d7vjjjvsxx9/dPunCw2agE3h2xu627Ztm2TbQkND3VddhNDy3mOhgD106FB7+umnXY+BRYsW2WeffeZe27x5s6v0/197dwIcRZm/cfyXcEoIckTQgAgakAIVWbnkUEAERFEUWEFghV0TXVFcj0UWxS05PBBFTkEURBTBFTwBdwuP2lIQQS4PPBCBRUQMhBDCEUjmX8+7O/NPQgJJmM7MZL6fqikmMz3db8+89MzT79E1a9Z0N7XgK/S3bdvWIklaWqZlZ+eEuhgogM4k6gfQ3r0Z9r9OHAD1BMXGsQTUEZwujiPIXxdOJepCt7o8a0bysWPHWkZGhus+3bNnT9eavHnzZheet2zZUuBrf/nlF9cKrOAp6oKekJDg7qtFevr06datWzfXinzvvffaueeeW6QyKej7g6228f7777sWdFEX8cOHDxdYlvzrP+ecc2znzp3uvsqgsK3WeoXn3r1726233mqjRo2yL7/80iZOnFhgWdTyPmnSJNcqrtb8Xbt2udf63zuVRQFbPQIaN24cOMHQpEkTF+o7depk+/btc13PFc4jEYEu/D8fPiNQT8CxBHzfINT4TYKiirrQHRMT48ZB67Zp0ybXkrxy5UrX/XrhwoVWrly5Qi/LpdZnhdYrr7zyhOfq1avnuotr7PPo0aNdd/Vnn322SGVSUK5bt25gGxpnPnDgwJO+Rsv9+uuvJwRx/3o6duxozzzzjAvCGmOemJjoTiioJbxRo0auhb0g7777rhuPrm7qFStWtDFjxgSei42Ndd3ily5d6rbtH88tN998s2s9Vyt9hQoVXNd3tb4DAAAAQDSLuonUfv75Z9u/f79rQY6Pj3djr9VVWmOg1cqbnp5e6MRlmnxs9uzZrpVXFLDV6iv6Vy3fCu3qqq5/T0bjpVUGhVd1UdcYaFEXbQXe7du3u79Vrq+//vqE16tFXWOqv/nmG7cenUBQd2+12svZZ5/tWtBfeukl69y5s3tMrdA6GXCy8dzaJ70P2q5atfV+5aYu5grmOlGhyd78dC1znShQyFc5TtZ9HQAAAACiRdS1dO/YscPGjx/vgrWCsbqX9+rVy02GptZhdZNWYC2IgrFCucKlZutWqNXkZXqNQqcmaFNoVbdrdTcvjGYt17hrBW+Nn1YrsW6iMijUq1x6Xl3DNXa8WbNmedahCcrGjRtnI0aMcPuilmx1Ga9fv35gGa3r448/toYNG7q/1eKtiddOFrr9s6CrW7pep1bx3JKSklyX+vPPP9/i4uLybEv79PLLL7u/9d7oJEVhvQYAAAAAIBrE+PzXlQJKSK3iffr0cWPBFcpF4+IVujVpm3/iuaLoO3Olrd2WVuqfRbPEarZ0eEc3kdrx40ykFq4TVSQkxFtqKhOpgXoCjiXg+wahw28S5K8LpxJ1Ld2lSa3Kc+fODfxdtWpVd6myslY+Xb5s9+7dbry8xsartV/X81YrvcaRAwAAAEC0InR7SF3EdSvr5VMX9OTkZLcuzVyucfLqcq9rd5/qeuUAAAAAUJaRiHDa1MKdkpLibgAAAACAKJ69HAAAAACA0kLoBgAAAADAI3QvR1g5PyHODmdll/p2k2pXLfVtAgAAACj7CN0IKxP6Ng/Zto9n51hODlfQAwAAABA8hG6EFV0nO1QUuAndAAAAAIKJ0I2wout85+SEuhQAAAAAEBxMpAYAAAAAgEcI3QAAAAAAeITQDQAAAACARxjTjbASGxtrsaV4KojJ0wAAAAB4idCNsFKjRlypXyYsff8hZi0HAAAA4AlCN8LKiDc22te7DpTKtpJqV7XJ/VtYbGwMoRsAAACAJwjdCCtbUzNLLXQDAAAAgNeYSA0AAAAAAI8QugEAAAAA8AihGwAAAAAAjxC6AQAAAADwCKEbAAAAAACPELoBAAAAAPBImQ/dq1evtuuuuy7PY3/+85/tgw8+CFmZyrqpU6famDFjQl0MAAAAAAi5qLxO93PPPRfqIgAAAAAAooDnLd3bt2+35ORku/zyy61r1642a9Ysy87Odq2hQ4cOtQEDBljbtm2te/futmLFisDrfvnlF7vjjjusXbt27nWLFy8OPNelSxd7+umnrUePHjZp0iTLysqyP/3pT3bVVVfZZZddZn/729/cNjZs2GB33nmn/fjjj9amTRt74okn3OsHDx5s77//vruv12odWmf79u3trrvust27d7vndu7cab/73e8C22revLnbztGjRwvd3/vvv9/tS4sWLVz5MzMz7dChQ+5vlcNv3bp1dv3117v7Bw8etAceeMCV8cILL3Q33f/uu+8K3MaTTz7pWu8vvfRSGzRokP3666/u8SVLlli/fv3snnvuce+b9mnRokU2bNgw93eHDh3so48+Cqzn008/tRtvvNFtS2X58MMPA8/lfo/kxRdftJEjR+bZjsrcqVMnt296j2TOnDn2wgsv2D/+8Q+33n/9619FrisAAAAAUNZ42tKtQHv77bfbkCFDbObMmbZ3714XRGvUqPHfjZcv71qdzzzzTNcNXAF5+fLlVrt2bbv33nutZ8+e7nkF9/79+7sA3LBhQ/davebtt9+2SpUqWU5Ojgt9emzPnj0uyCtQXnHFFTZjxgwbO3asvffeewWWcfbs2fbVV1/Zm2++aXFxcW55bXvBggWBfWjVqpUr95EjR1yZPv/8c+vYsWOB63v44YetevXqlpaW5rqxv/POO648CuLLli2zu+++2y2n8txwww3u/vPPP+/eG+37gQMHrG/fvjZ58mQXvgui9/Svf/2rC/QPPfSQzZ8/3wVg0QmBlJQUmzhxogvn8+bNswkTJliTJk3cyYW5c+da586dbdu2be4EgT4XnUzQe3DbbbfZq6++aklJSaf8bPVeKPDrRMaaNWvcCRSF+z/+8Y+uXNr/Rx55xCJFTEyoS4CifkZ8VqCe4HRwLAF1BKeL4wj8ivq71NPQvWnTJouNjXWBWRSmFezU+tqyZUs799xzXUAVtXZfcsklrgVYLafff/+9vfbaaxYTE2MNGjRwrdAKu/7QrVZUBW7RNvzrqVWrlp133nmWmppapDK+9dZbgcAuCo4Kpv7W7goVKrjwLgrljRo1cqGyMP4TClrfBRdcECiHAvajjz7qWtKPHz/uWoD9rffffvutXXvttVazZk13U2v91q1b3XtSEP++Vq1a1Ro3buxa5P3OOecca9asmbuv9ai1/KKLLgr8vWrVKndfJwDUeq/Wcrn44ovtmmuusX/+859FCt2JiYmB16qcPp/PtehXrlzZIk2NGnGhLgKKoVateN4vUE9w2jiWgDoCjiMoLZ6GbnURVwjMTX/7A21+Csy//fab7dq1yw4fPuy6Q/upxVkBsyDqnq3W3M2bN1uVKlVsy5YtJS5juXLl3MkBPa5/89NJgMIcO3bMtSar5VfhU/vRu3fvwEkC7ZMCtlrjtS916tRxz6kVWt2+1VV737597sSDwnlBFG7VfVuhXdvQ8grMBclf1tx/a/900iM3vQ+5A3xRnew9iQRpaZmWnZ0T6mLgFFTN9CN5794M8/l4u0A9QclwLAF1BKeL4wjy14WQhm6FVgXM3BT26tatW+DyGpusFlS9Tq25n3zySZECnVqm9+/fbwsXLnShWd2vi1NGbfess85yf6sVWsFfZVSILo53333X1q5d67poV6xYMc8M3mqN17jppUuXuu35x3PLzTff7HoDaJy0WtbV7buwIK3W/ldeecW1VKvlXWOtf/jhh2KVM/d+n+yzUbf9aEGIi6zPis8L1BNwLAHfNwg1fpMgLCZS01hhtUJrvLRaaBXyNIZak3fJzz//7J7Xc7qEl8Kjup0r+KmLuAKlgq+e17L5Q6KfujWrJVzLpqenu9Dspy7o+lvLaHK1/NSletq0aa4cer3uq9t0Qa3cp6JtaB0qi1q1Vebc1MVcwXzlypV29dVXBx7Xfg4cONC1dqsF298dv7BtaD80dlvb0nj3kujWrZsbV/7NN9+491dDAbRtjVn3d5PXSQ9tT/uxcePGIq9b77lazFXOgt5zAAAAAIgWnoZudX/WRF2a7VqzZytYqru1/7rZO3bssJtuusmNCdYEZtOnT3ct3Grd1kRiCoLqcn3llVfa6NGjC501XBN6aSIyTW6mbtlnn3124LmmTZu69WsG9Mcee+yE12r5evXquTHVmmBMZXrqqadK1GVardcKqxoDrjL5x3f7aax0QkKCey/USu2nck+ZMsU9rluvXr3cLO8F0dj21q1bu5na9d5pMrqS0CRt48aNsxEjRrj35+9//7ubfK1+/fruefUWWL9+vdveqFGjinUSQoFeE8Lpc9NEcgAAAAAQrWJ8auYMAV0yLNJmuPaCWsX79OnjxoL7JzDTmHSdmFBX8mrVqlk06Ttzpa3dllYq22qWWM2WDu/oxnQfPx49Xekjlc6DJSTEW2oqY7pBPQHHEvB9g9DhNwny14WQjukuy9SCr7HkfppJXF3ki0uX7tLEcmpZ1xhqdefW9bw1+7mum/3444/nWV7XMo+PZ/ZmAAAAAIgEhO4S0nW7dTtdugRZcnKyW5dmIld3cc1mrmt3a0y8f/ZzAAAAAEDkCVnovvvuu0O16bCiFu6UlBR3AwAAAACULZ5OpAYAAAAAQDQjdAMAAAAA4BFCNwAAAAAAHmEiNYSV8xPi7HBWdqlsK6l21VLZDgAAAIDoRehGWJnQt3mpbu94do7l5ITkUvUAAAAAogChG2ElLS2zVLenwE3oBgAAAOAVQjfCSk6OWp5DXQoAAAAACA4mUgMAAAAAwCOEbgAAAAAAPELoBgAAAADAI4RuAAAAAAA8QugGAAAAAMAjhG4AAAAAADxC6AYAAAAAwCOEbgAAAAAAPELoBgAAAADAI4RuAAAAAAA8QugGAAAAAMAjhG4AAAAAADxC6AYAAAAAwCOEbgAAAAAAPELoBgAAAADAI4RuAAAAAAA8QugGAAAAAMAjhG4AAAAAADxC6AYAAAAAwCOEbgAAAAAAPELoBgAAAADAI4RuAAAAAAA8QugGAAAAAMAjhG4AAAAAADxC6AYAAAAAwCOEbgAAAAAAPELoBgAAAADAI4RuAAAAAAA8Up53FuEkJua/N6CgupH7X6CwYwj1BKf6nqGOgDqC08FxBH5F/V0a4/P5fEVbFAAAAAAAFAfdywEAAAAA8AihGwAAAAAAjxC6AQAAAADwCKEbAAAAAACPELoBAAAAAPAIoRsAAAAAAI8QugEAAAAA8AihGwAAAAAAjxC6AQAAAADwCKEbAAAAAACPELoBAAAAAPAIoRtB5/P5bNGiRda9e3dr3bq19e7d2/7973+f1vKHDh2yJ554wjp16mRt27a12267zX766Sc+vQgW7Hqyc+dOa9KkibVp0yZwS0lJKaW9QbjUlWPHjtl7771nffv2tTFjxpRoHYjeetKlSxdr1apVnuPI8ePHS3EvEOq6oWVffvllu+mmm9zvjauuusrmz5+fZ5nvvvvOhg4d6p7X75JnnnnGsrKy+PAiXDDrydSpU6158+Z5jiVvvfVWKe4Nwo4PCLLly5f7unfv7tu6dasvJyfH99lnn/lat27t27ZtW4mXf/TRR33Dhg3zpaen+7Kysnzz5s3zdevWzd1HZAp2PfnPf/7j69y5cynvBcKtrqgevPLKK74HH3zQHTdKsg5Ebz3RMUTPoWwp7v//BQsWuHqgZfWa9u3b+1avXu2ey8jI8HXo0MH39ttv+44dO+bbu3evb/Dgwb5p06aV8l4hnOvJlClT3A3wo6UbQffSSy/ZsGHDrGHDhhYTE+PO7vXq1cveeOONEi1/9OhRW7hwoY0ePdqqVatmFSpUsMGDB1ulSpXss88+4xOMUMGuJyi7ivPZ16tXzwYOHGh169Yt8ToQvfUEZVNx//8PGDDA1REtq9d06NDBNm3a5J5btmyZNWrUyK6//norX7681axZ00aOHGmvvfZaKe8VwrmeAPkRuhF027Ztc19IuV144YW2ffv2Ei2/Y8cOq1q1qtWpUyfwvA5wjRs3LnSdiL56Inv27LGePXu6L7677rrLdTlH9NUVr9aB8Baszzg5Odnat29v/fv3t9WrVwe5lIjEuqHX169f393X0Lb860pKSrLU1FQ7ePBgEEuNSK4n8vrrr9sVV1zhuquru3lOTk7Qy4zIQehG0KWlpVlcXFyexxSa9XhJlt+3b98Jz0t8fHyh60T01ZPq1avb7NmzbfHixbZ8+XLX+vDggw96uAcI17ri1ToQ3oLxGY8bN85effVV++ijj6xPnz7u5N3+/fs9KC0ipW7o+0RhunPnzoWuq2LFila5cmXqSoQLZj3p1q2bzZkzxz7++GMXuN955x1bsmSJZ2VH+CN0I+hq1aplmZmZeR7TgUiPl2T5hISEAs8en2ydiL56oi/Gyy+/3M444wx3QuYvf/mLrVu3jsltorCueLUOhLdgfMbt2rVzJ+wUovr16+d6WG3evNmD0iIS6saqVavcJGnPP/+8G9rmX1f+3ySamE9D4TieRLZg1hO1kKvVPDY21vXMpOcMCN0IOo1r+fbbb/M8tmXLFmvQoEGJltd4mcOHD9uuXbtOWEavRWQKdj3JTzPJatx/uXLlglhqhEJxP3uv1oHwFuzPWLMTK0hVqVIlSCVEJNWNNWvW2EMPPWQzZsywxMTEk67rxx9/tNq1a7uTvohcwawn+XEsAaEbQafLaOjgs3XrVvej5YsvvrClS5fa73//+xItr+B0yy23uMu6HDhwwF2+RROW6F9d0gGRKdj1ZMWKFW78v57TkATVlxtuuIHQHYV1xat1ILyd7me8ceNGW79+vftu0Q9krUtdhps2bep52RFedeOTTz6xUaNG2axZs04Y46t5QzR2980333R1RV2Pn3rqKTfBKyJbsOqJTvprqJtaybUe9brTsBVdggzRq3yoC4CyR9cqTE9PdzNAKvxodlh1uynsDGBRlr///vtt8uTJLkQdOXLEXftw5syZBKoIFux6kpGRYcOHD7fdu3e71oYePXrYPffcU8p7hXCoK16tA+HtdD9jTXI0adIk94Nb91u2bJmnuyiio25oQrQ77rjD/b4YNGhQ4PFrr73WHnnkEdfzYe7cuTZ+/HibMGGC+77RtZqHDBlSynuFcK0n9913n23YsMGmT5/uuqvr9WPHjrUWLVrwoUWxGF03LNSFQHRRC6ToywugnoBjCvjuQSjxuwTUE3iN0A0AAAAAgEcY0w0AAAAAgEcI3QAAAAAAeITQDQAAAACARwjdAAAAAAB4hNANAAAAAIBHCN0AAAAAAHiE0A0AAAAAgEfKe7ViAACAYFi8eLHNnDkz8Hdqaqr5fD4766yzAo+lpKRYv3793P2DBw/aggULbNmyZXbgwAH3WHx8vF1zzTU2cOBAd99v+/bt1r17d0tMTCx0+zNmzLAmTZrwYQIASiTGp28tAACACPD999/bsGHDLDs72yZMmGAtW7bM83xWVpYNGTLEmjZtasnJyVanTh33+J49e+yFF16wDRs22Pz5861SpUqB0N2nTx9bu3ZtSPYHAFD20dINAADC2vr1623NmjUuMB85csSmTJliVapUsYkTJ7oW8EsvvdRatWplbdq0sU2bNrng/fDDD+dZR+3atW3UqFE2YMAA++KLL6xdu3Yh2x8AQHQhdAMAgLCWlpZmSUlJLjDn7ho+depUO3TokGulzsjIcI/FxsbasWPHXPfzmJiYPOvRY3quXLlypb4PAIDoRegGAABha9GiRTZr1qwiLbtz504bNGiQJSQk2MiRI+3222+38847L9CNfPbs2RYXF2ctWrTwuNQAAPw/xnQDAICIom7l8sADDxT4/NGjR23atGn26aefWmZmpntMYbtt27Y2fPhwq1y5cp6g/oc//CHwd3p6uvv3zDPPDDxW0NhxAACKipZuAAAQUTSJ2slokjSN/77zzjuta9eu7rEVK1bYvHnz8gRuqVevnn344YdFDvQAABQXoRsAAIS9zz//3HUP/+qrr6x8+fJuvPaSJUusWbNmNnToUOvYsWOoiwgAQIHoXg4AAMKaLvela2nretmXXXaZVaxY0T2uWco1W7nGbuta3qtWrbLnnnvOPbdv3z7Xpdx/aTB1OVdX85o1a7q/FdTV6u1f3s8/IVvuCdv8y+sGAEBx0dINAADCmlq2/SFbt9yhWzfNSl6hQgU3u7luxVHc5QEAKC5augEAQNj78ssvbc6cObZu3brAmG5dHkzX6L711ltdCzgAAOGI0A0AAAAAgEdivVoxAAAAAADRjtANAAAAAIBHCN0AAAAAAHiE0A0AAAAAgEcI3QAAAAAAeITQDQAAAACARwjdAAAAAAB4hNANAAAAAIBHCN0AAAAAAJg3/g/1KjmEO6CRlQAAAABJRU5ErkJggg==" }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Top 10 중요한 특징:\n", " feature importance\n", "7 sales_max 0.283394\n", "36 trend_consecutive_down 0.105579\n", "43 seasonality_detected 0.054845\n", "27 operation_months 0.052475\n", "35 trend_direction 0.043214\n", "5 sales_mom_change 0.038016\n", "8 sales_min 0.034284\n", "0 sales_avg_1m 0.029166\n", "9 sales_range 0.025395\n", "37 trend_consecutive_up 0.024245\n" ] } ], "execution_count": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 9. 모델 저장" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:59:18.811421Z", "start_time": "2025-12-01T09:59:18.797246Z" } }, "source": [ "import os\n", "\n", "# 모델 디렉토리 생성\n", "os.makedirs('../models', exist_ok=True)\n", "\n", "# 모델 저장\n", "with open('../models/xgboost_model.pkl', 'wb') as f:\n", " pickle.dump(xgb_model, f)\n", "\n", "with open('../models/lightgbm_model.pkl', 'wb') as f:\n", " pickle.dump(lgb_model, f)\n", "\n", "with open('../models/label_encoders.pkl', 'wb') as f:\n", " pickle.dump(label_encoders, f)\n", "\n", "# 특징 이름 저장\n", "feature_names = list(X.columns)\n", "with open('../models/feature_names.json', 'w', encoding='utf-8') as f:\n", " json.dump(feature_names, f, ensure_ascii=False, indent=2)\n", "\n", "# 모델 설정 저장\n", "config = {\n", " 'model_version': '2.0',\n", " 'ensemble_weights': [0.5, 0.5],\n", " 'threshold': 0.5,\n", " 'n_features': len(feature_names),\n", " 'n_samples_train': len(X_train),\n", " 'n_samples_test': len(X_test),\n", " 'performance': {\n", " 'accuracy': float(accuracy),\n", " 'precision': float(precision),\n", " 'recall': float(recall),\n", " 'f1_score': float(f1),\n", " 'auc_roc': float(auc)\n", " }\n", "}\n", "\n", "with open('../models/config.json', 'w', encoding='utf-8') as f:\n", " json.dump(config, f, ensure_ascii=False, indent=2)\n", "\n", "print(\"모델 저장 완료!\")\n", "print(\"\\n저장된 파일:\")\n", "print(\" - ../models/xgboost_model.pkl\")\n", "print(\" - ../models/lightgbm_model.pkl\")\n", "print(\" - ../models/label_encoders.pkl\")\n", "print(\" - ../models/feature_names.json\")\n", "print(\" - ../models/config.json\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "모델 저장 완료!\n", "\n", "저장된 파일:\n", " - ../models/xgboost_model.pkl\n", " - ../models/lightgbm_model.pkl\n", " - ../models/label_encoders.pkl\n", " - ../models/feature_names.json\n", " - ../models/config.json\n" ] } ], "execution_count": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 10. 모델 테스트" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2025-12-01T09:59:21.007015Z", "start_time": "2025-12-01T09:59:20.978859Z" } }, "source": [ "# 학습된 모델로 예측 테스트\n", "from predictor import EarlyWarningPredictor\n", "\n", "# 모델 로드\n", "model = EarlyWarningPredictor.from_pretrained(\"../models/\")\n", "\n", "# 테스트 데이터\n", "test_store = {\n", " 'store_id': 'TEST_001',\n", " 'industry': '카페',\n", " 'location': '서울',\n", " 'avg_sales': 35,\n", " 'reuse_rate': 20.0,\n", " 'operating_months': 24,\n", " 'sales_trend': -0.08\n", "}\n", "\n", "# 예측\n", "result = model.predict(test_store)\n", "\n", "print(\"모델 테스트 결과:\")\n", "print(f\" 위험도: {result['risk_score']}/100\")\n", "print(f\" 등급: {result['risk_level']}\")\n", "print(f\" 폐업 확률: {result['closure_probability']:.1%}\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "모델 로드 완료: v2.0\n", "모델 테스트 결과:\n", " 위험도: 0.78/100\n", " 등급: 낮음\n", " 폐업 확률: 0.8%\n" ] } ], "execution_count": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 학습 완료!\n", "\n", "### 다음 단계:\n", "\n", "1. **예측 사용**: `src/predictor.py`로 새로운 매장 위험도 예측\n", "2. **모델 개선**: 하이퍼파라미터 튜닝, 추가 특징 생성\n", "3. **배포**: API 서버 또는 웹 대시보드 구축\n", "\n", "### 주요 성능 지표:\n", "\n", "- **Accuracy**: 97.2% - 전체 정확도\n", "- **Recall**: 85.7% - 실제 폐업의 85.7% 감지\n", "- **Precision**: 89.3% - 폐업 예측 시 89.3% 정확\n", "\n", "**Recall이 가장 중요**: 실제 위험 매장을 놓치지 않는 것이 핵심" ] }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.0" } }, "nbformat": 4, "nbformat_minor": 4 }