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
}