File size: 146,334 Bytes
5092c1e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 |
{
"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": [
"<Figure size 800x500 with 1 Axes>"
],
"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": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sales_avg_1m</th>\n",
" <th>sales_avg_3m</th>\n",
" <th>sales_avg_6m</th>\n",
" <th>sales_avg_12m</th>\n",
" <th>sales_recent_vs_previous</th>\n",
" <th>sales_mom_change</th>\n",
" <th>sales_yoy_change</th>\n",
" <th>sales_max</th>\n",
" <th>sales_min</th>\n",
" <th>sales_range</th>\n",
" <th>...</th>\n",
" <th>trend_r2</th>\n",
" <th>trend_direction</th>\n",
" <th>trend_consecutive_down</th>\n",
" <th>trend_consecutive_up</th>\n",
" <th>volatility_cv</th>\n",
" <th>volatility_std</th>\n",
" <th>volatility_mad</th>\n",
" <th>volatility_recent_std</th>\n",
" <th>seasonality_strength</th>\n",
" <th>seasonality_detected</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>...</td>\n",
" <td>3083.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" <td>4113.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>50.209701</td>\n",
" <td>49.870330</td>\n",
" <td>49.834367</td>\n",
" <td>50.035897</td>\n",
" <td>0.593289</td>\n",
" <td>3.163546</td>\n",
" <td>1.504984</td>\n",
" <td>57.123754</td>\n",
" <td>43.177121</td>\n",
" <td>13.946633</td>\n",
" <td>...</td>\n",
" <td>0.069713</td>\n",
" <td>0.016047</td>\n",
" <td>0.122052</td>\n",
" <td>0.175541</td>\n",
" <td>10.701480</td>\n",
" <td>5.250956</td>\n",
" <td>4.196452</td>\n",
" <td>4.008452</td>\n",
" <td>25.329004</td>\n",
" <td>0.380501</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>8.975016</td>\n",
" <td>7.155192</td>\n",
" <td>6.399777</td>\n",
" <td>6.112697</td>\n",
" <td>11.278638</td>\n",
" <td>19.978850</td>\n",
" <td>18.420789</td>\n",
" <td>6.593646</td>\n",
" <td>6.868727</td>\n",
" <td>9.709328</td>\n",
" <td>...</td>\n",
" <td>0.114427</td>\n",
" <td>0.859393</td>\n",
" <td>0.337625</td>\n",
" <td>0.393051</td>\n",
" <td>8.257864</td>\n",
" <td>3.992813</td>\n",
" <td>3.658268</td>\n",
" <td>5.173531</td>\n",
" <td>21.281254</td>\n",
" <td>0.485569</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>37.500000</td>\n",
" <td>37.500000</td>\n",
" <td>37.500000</td>\n",
" <td>37.500000</td>\n",
" <td>-40.000000</td>\n",
" <td>-40.000000</td>\n",
" <td>-40.000000</td>\n",
" <td>37.500000</td>\n",
" <td>37.500000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>50.000000</td>\n",
" <td>45.833333</td>\n",
" <td>45.833333</td>\n",
" <td>46.428571</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>50.000000</td>\n",
" <td>37.500000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0.005870</td>\n",
" <td>-1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>50.000000</td>\n",
" <td>50.000000</td>\n",
" <td>50.000000</td>\n",
" <td>50.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>62.500000</td>\n",
" <td>37.500000</td>\n",
" <td>12.500000</td>\n",
" <td>...</td>\n",
" <td>0.030303</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>10.810623</td>\n",
" <td>5.529073</td>\n",
" <td>3.993056</td>\n",
" <td>0.000000</td>\n",
" <td>24.742268</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>62.500000</td>\n",
" <td>54.166667</td>\n",
" <td>52.083333</td>\n",
" <td>53.125000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>62.500000</td>\n",
" <td>50.000000</td>\n",
" <td>25.000000</td>\n",
" <td>...</td>\n",
" <td>0.085372</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>16.315435</td>\n",
" <td>7.801169</td>\n",
" <td>6.250000</td>\n",
" <td>7.216878</td>\n",
" <td>45.283019</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>62.500000</td>\n",
" <td>62.500000</td>\n",
" <td>62.500000</td>\n",
" <td>62.500000</td>\n",
" <td>66.666667</td>\n",
" <td>66.666667</td>\n",
" <td>66.666667</td>\n",
" <td>62.500000</td>\n",
" <td>62.500000</td>\n",
" <td>25.000000</td>\n",
" <td>...</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" <td>2.000000</td>\n",
" <td>31.491833</td>\n",
" <td>14.433757</td>\n",
" <td>12.500000</td>\n",
" <td>14.433757</td>\n",
" <td>64.864865</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows ร 44 columns</p>\n",
"</div>"
]
},
"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": [
"<Figure size 800x600 with 2 Axes>"
],
"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": [
"<Figure size 1000x800 with 1 Axes>"
],
"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/8T0xy0y8oTF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RkDZERGd4UM3AAAAgMwjE4yeBQAAAADAPwjdAAAAAAD4CKEbAAAAAAAfIXQDAAAAAOAjhG4AAAAAAHyE0A0AAAAAgI8QujOYcuXK2YEDB/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/j1KYTrOS8FXQXhxKjSre7m6jmg7uNlypRJtr0J7dixwx3no0ePugsQCu7J7au6uutiiZeq394LEOlRVFS0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"
},
"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
}
|