File size: 120,525 Bytes
fe78e9e
 
6c50497
 
 
 
 
4a4880c
6c50497
 
fe78e9e
 
cf5faeb
fe78e9e
ba240c4
6c50497
76f50ce
 
 
4a4880c
ba240c4
76f50ce
ba240c4
 
370a710
cf5faeb
76f50ce
cf5faeb
 
6c50497
 
 
 
 
 
 
 
 
 
 
76f50ce
6c50497
 
 
 
 
 
 
 
 
76f50ce
6c50497
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76f50ce
6c50497
 
 
 
 
 
 
 
 
 
76f50ce
6c50497
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76f50ce
6c50497
 
 
 
 
 
 
 
4a4880c
 
76f50ce
4a4880c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76f50ce
4a4880c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76f50ce
4a4880c
 
 
 
 
 
 
 
76f50ce
4a4880c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76f50ce
4a4880c
 
 
 
 
 
 
 
76f50ce
4a4880c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c50497
 
 
 
 
 
 
76f50ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ba240c4
 
 
 
 
 
 
76f50ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cf5faeb
 
 
 
 
 
 
 
 
 
76f50ce
 
 
 
 
 
 
ba240c4
 
 
 
 
 
 
 
 
cf5faeb
ba240c4
 
 
 
 
 
 
 
cf5faeb
ba240c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370a710
 
 
ba240c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370a710
 
ba240c4
370a710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ba240c4
370a710
 
 
 
 
 
 
 
ba240c4
 
 
 
370a710
ba240c4
370a710
 
 
 
 
 
 
 
 
 
ba240c4
370a710
 
ba240c4
 
cf5faeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c50497
 
 
 
 
 
fe78e9e
 
 
6c50497
 
 
 
 
fe78e9e
6c50497
 
 
 
 
 
 
 
 
cf5faeb
fe78e9e
 
 
 
 
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
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Arabic Dialect Classifier\n",
    "This notebook contains the training of the classifier model. The goal is to classify the dialects at the country level."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "\n",
    "from datasets import DatasetDict, Dataset\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import RandomizedSearchCV\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "import torch\n",
    "from transformers import AutoModel, AutoTokenizer\n",
    "import xgboost as xgb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Exploring the Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = pd.read_csv(\"../data/DA_train_labeled.tsv\", sep=\"\\t\")\n",
    "df_test = pd.read_csv(\"../data/DA_dev_labeled.tsv\", sep=\"\\t\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "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>#1_tweetid</th>\n",
       "      <th>#2_tweet</th>\n",
       "      <th>#3_country_label</th>\n",
       "      <th>#4_province_label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>TRAIN_0</td>\n",
       "      <td>حاجة حلوة اكيد</td>\n",
       "      <td>Egypt</td>\n",
       "      <td>eg_Faiyum</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>TRAIN_1</td>\n",
       "      <td>عم بشتغلوا للشعب الاميركي اما نحن يكذبوا ويغشو...</td>\n",
       "      <td>Iraq</td>\n",
       "      <td>iq_Dihok</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>TRAIN_2</td>\n",
       "      <td>ابشر طال عمرك</td>\n",
       "      <td>Saudi_Arabia</td>\n",
       "      <td>sa_Ha'il</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>TRAIN_3</td>\n",
       "      <td>منطق 2017: أنا والغريب علي إبن عمي وأنا والغري...</td>\n",
       "      <td>Mauritania</td>\n",
       "      <td>mr_Nouakchott</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>TRAIN_4</td>\n",
       "      <td>شهرين وتروح والباقي غير صيف ملينا</td>\n",
       "      <td>Algeria</td>\n",
       "      <td>dz_El-Oued</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  #1_tweetid                                           #2_tweet  \\\n",
       "0    TRAIN_0                                     حاجة حلوة اكيد   \n",
       "1    TRAIN_1  عم بشتغلوا للشعب الاميركي اما نحن يكذبوا ويغشو...   \n",
       "2    TRAIN_2                                      ابشر طال عمرك   \n",
       "3    TRAIN_3  منطق 2017: أنا والغريب علي إبن عمي وأنا والغري...   \n",
       "4    TRAIN_4                  شهرين وتروح والباقي غير صيف ملينا   \n",
       "\n",
       "  #3_country_label #4_province_label  \n",
       "0            Egypt         eg_Faiyum  \n",
       "1             Iraq          iq_Dihok  \n",
       "2     Saudi_Arabia          sa_Ha'il  \n",
       "3       Mauritania     mr_Nouakchott  \n",
       "4          Algeria        dz_El-Oued  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "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>#1_tweetid</th>\n",
       "      <th>#2_tweet</th>\n",
       "      <th>#3_country_label</th>\n",
       "      <th>#4_province_label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DEV_0</td>\n",
       "      <td>قولنا اون لاين لا يا علي اون لاين لا</td>\n",
       "      <td>Egypt</td>\n",
       "      <td>eg_Alexandria</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DEV_1</td>\n",
       "      <td>ههههه بايخه ههههه URL  …</td>\n",
       "      <td>Oman</td>\n",
       "      <td>om_Muscat</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DEV_2</td>\n",
       "      <td>ربنا يخليك يا دوك ولك المثل :D</td>\n",
       "      <td>Lebanon</td>\n",
       "      <td>lb_South-Lebanon</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>DEV_3</td>\n",
       "      <td>#اوامر_ملكيه ياشباب اي واحد فيكم عنده شي يذكره...</td>\n",
       "      <td>Syria</td>\n",
       "      <td>sy_Damascus-City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>DEV_4</td>\n",
       "      <td>شد عالخط حتى هيا اكويسه</td>\n",
       "      <td>Libya</td>\n",
       "      <td>ly_Misrata</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  #1_tweetid                                           #2_tweet  \\\n",
       "0      DEV_0               قولنا اون لاين لا يا علي اون لاين لا   \n",
       "1      DEV_1                           ههههه بايخه ههههه URL  …   \n",
       "2      DEV_2                     ربنا يخليك يا دوك ولك المثل :D   \n",
       "3      DEV_3  #اوامر_ملكيه ياشباب اي واحد فيكم عنده شي يذكره...   \n",
       "4      DEV_4                            شد عالخط حتى هيا اكويسه   \n",
       "\n",
       "  #3_country_label #4_province_label  \n",
       "0            Egypt     eg_Alexandria  \n",
       "1             Oman         om_Muscat  \n",
       "2          Lebanon  lb_South-Lebanon  \n",
       "3            Syria  sy_Damascus-City  \n",
       "4            Libya        ly_Misrata  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(#1_tweetid           0\n",
       " #2_tweet             0\n",
       " #3_country_label     0\n",
       " #4_province_label    0\n",
       " dtype: int64,\n",
       " #1_tweetid           0\n",
       " #2_tweet             0\n",
       " #3_country_label     0\n",
       " #4_province_label    0\n",
       " dtype: int64)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.isnull().sum(), df_test.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's look at the distribution of the labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Value counts of country label in train data')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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RI0fPx4JCQmYMGEC/vrrL1y/fh1r167Fpk2bMGPGjHIHYWtriz///BP//vuveFf3l19+iTNnzmDChAmIi4vDjRs3sG/fPkyaNAkAUK9ePXTt2hVjxoxBVFQUYmNjMXr0aBgYGJRqn5s2bULz5s3Rvn17ODs7i0vbtm3RqlWrIm+MKlClShWYmZnhf//7H27evInjx48Xm1itXbsWe/fuxdWrVzFhwgQ8evQIPj4+pT42aWlpuHv3rtLy4sWLUm9fXg4ODuIIZ3x8PD7//HPcvXtXqY6trS2ioqKQmJgoTm2YMGECHj58iEGDBuHcuXO4desWjhw5Ah8fH+Tl5SEqKgrffvstYmJikJSUhD179uD+/ftlmitMREREmqtMyamtrS1Onjwpzh1s1qwZgoKCEBQUhAEDBpQ7iEWLFiExMRG1a9cW53a6uLggIiICN27cQLt27dCkSRPMnTsXVlZW4nabN2+GQqFAhw4d0LdvX3z22WewsLB44/6ys7MREhJS6KamAv369UNISEixl7C1tLSwfft2xMbGwtnZGV988QW+++67IusGBARgyZIlaNSoEU6ePInffvsN1apVe2OMBTp37gwrKyul5UO83Wnu3Llo2rQpPD094ebmBktLS/Tu3VupzvTp06GtrQ0nJyeYm5sjKSkJNWrUwOnTp5GXlwdPT084OztjypQpkMvl0NLSgomJCf788090794ddevWxVdffYVly5a9k5cCEBERkfqTCCU9w4dIBWVkZEAulyM9PV1prjMRERGprtL+/a6QN0QRERERERVFY5PTrVu3QiaTFbk0aNCgosPD2LFji41v7NixFR0eERERUYXQ2Mv6T548wb1794pcp6urKz4AvqKkpqYW+xpOExOTUs2drawKLgsofHdCS2pY0eGUWWKAV0WHQERE9MGV9rL+e3kIvyowNjZWeji9qrGwsGACSkRERPQajb2sT0RERETqh8mphhIEAZ07d4anp2ehdevWrYNcLkdSUlIFREZERERUPCanGkoikWDz5s2IiorCjz/+KJbfvn0bX375JVatWgVra+sKjJCIiIioMCanGkyhUGDVqlWYPn06bt++DUEQMGrUKHTq1AnNmzdH9+7dIZPJUL16dQwbNkx8OxcAuLm5YdKkSfD19UWVKlVQvXp1/O9//0NmZiZGjhwJY2Nj1K5du9DrbK9c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y7FkyRI4Oztj69at8Pf3L1MbgYGBePToEZo0aYJhw4Zh8uTJsLCweKu4iIiISHNIBEEQKjoIorLIyMiAXC5Heno6558SERGpidL+/ebIKRERERGpDCanRERERKQymJwSERERkcpgckpEREREKoPJKRERERGpDCanRERERKQymJwSERERkcpgckpEREREKoPJKRERERGpDCanRERERKQymJwSERERkcpgckpEREREKoPJKRERERGpDCanRERERKQymJwSERERkcrQqegAiMpKEAQAQEZGRgVHQkRERKVV8He74O94cZicktpJS0sDACgUigqOhIiIiMrqyZMnkMvlxa5nckpqp2rVqgCApKSkEr/c6igjIwMKhQLJyckwMTGp6HDeKfZNPWly3wDN7h/7pp40uW+CIODJkyeoUaNGifWYnJLa0dJ6OVVaLpdr3D/cAiYmJuybGmLf1Jcm9499U0+a2rfSDCrxhigiIiIiUhlMTomIiIhIZTA5JbUjlUoxf/58SKXSig7lnWPf1BP7pr40uX/sm3rS5L6VlkR40/38REREREQfCEdOiYiIiEhlMDklIiIiIpXB5JSIiIiIVAaTUyIiIiJSGUxOiYiIiEhlMDkltbJu3TrY2dlBX18fH330EU6ePFnRIb3RggULIJFIlBZLS0txvSAIWLBgAWrUqAEDAwO4ubnh77//VmojKysLkyZNQrVq1WBkZISPP/4Y//zzz4fuCv7880/07NkTNWrUgEQiQWhoqNL6d9WXR48eYdiwYZDL5ZDL5Rg2bBgeP35coX3z9vYudB5btmypFn3z9/dHs2bNYGxsDAsLC/Tu3RvXrl1TqqOu5640fVPXc7d+/Xq4uLiIbwpq1aoVDh48KK5X13NWmr6p6zkrir+/PyQSCXx9fcUydT53H4RApCa2b98u6OrqChs3bhSuXLkiTJkyRTAyMhLu3LlT0aGVaP78+UKDBg2ElJQUcUlNTRXXBwQECMbGxsLu3buFS5cuCZ988olgZWUlZGRkiHXGjh0r1KxZUzh69Khw/vx5wd3dXWjUqJGQm5v7Qfty4MABYc6cOcLu3bsFAMLevXuV1r+rvnTt2lVwdnYWIiMjhcjISMHZ2Vno0aNHhfZtxIgRQteuXZXOY1pamlIdVe2bp6ensHnzZuHy5ctCXFyc4OXlJVhbWwtPnz4V66jruStN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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.barh(y=df_train[\"#3_country_label\"].value_counts().sort_values(ascending=True).index,\n",
    "         width=df_train[\"#3_country_label\"].value_counts().sort_values(ascending=True))\n",
    "plt.title(\"Value counts of country label in train data\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Value counts of country label in test data')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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JOKc00qmefPm0NfXx9y5czFp0iRcuHDhvZ95GhISglu3bqFdu3aoUqUKDh8+jPz8fNStW7dQXSsrK+jo6GD9+vUYN24crl69Cl9f3/c6PhEREVUcHDmtZExMTLBjxw4cPnwYDRo0wK5du7B48eL3atPY2BgHDhxAhw4d4ODggM2bN2PXrl2oX79+obpmZmYIDAzEvn374OjoCH9/f3z77bfvdXwiIiKqOCTC6xMQiVRceno65HI5FFP3QkOqX97hqJVEf8/yDoGIiCqpgu/vtLS0N94/wsv6pLauLvHgzVFEREQVDC/rExEREZHKYHJKRERERCqDl/VJbTktOsY5p0XgvFIiIlJnHDklIiIiIpVRLsmpq6srpk6d+kHatrGxwZo1az5I26WRmJgIiURSJg+4L2sSiQTBwcHlHQYRERFRIaVKTotLKoODgyGRSErczoEDB5QevF7eCeXXX38NTU1N+Pv7l1sMrytIbotazp8//15tp6SkoGvXru8d44f8TwYRERFVTuUycmpiYgJDQ8PyOHSRtm3bhlmzZiEgIOCtdYt6D/2H9PvvvyMlJUVp+eSTT96rTQsLC0il0mK3f+xzJCIiIipQ5snp4sWL0ahRI2zfvh02NjaQy+X4/PPP8fTpU7HOqyNurq6uuHPnDr788ktxZLBAREQE2rVrBz09PSgUCkyePFnpnfD3799Hjx49oKenB1tbW+zcubPU8YaHh+P58+dYunQpMjMz8ccffxR5PgEBAbCzs4NUKoUgCDh69CjatGkDY2NjmJqaonv37khISCjU/rVr19CqVSvo6uqifv36CAsLK1V8pqamsLCwUFq0tbULxWZlZQWZTIbx48cjLy8PK1asgIWFBczNzbFs2TKlNl+9rF8wQrt37164urpCV1cXO3bsQGpqKgYOHIiaNWtCX19ffJtUAS8vL4SHh2Pt2rXi7y0xMREAEBcXh27dukEmk6FatWoYOnQoHj58KO77yy+/oEGDBtDT04OpqSk6deqk9Ht9XVZWFtLT05UWIiIiqpg+yMhpQkICgoODERISgpCQEISHhxd7yfzAgQOoWbMmli5dKo4MAsCVK1fg4eGBPn364PLly9izZw/OnDmDiRMnivt6eXkhMTERJ0+exC+//IKNGzfi/v37pYp169atGDhwILS1tTFw4EBs3bq1UJ2bN29i79692L9/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vnBwcMCmTZsgl8uxdetWAMDGjRuhUCjw3XffoV69eujVqxeWLFmClStXKs1tfRMzMzMAgLGxMSwsLMT1kvDz84NcLhcXhUJR4n2JiIhIvTA5raAEQYBEIilx/ZYtW4o/a2lpwcXFBfHx8QCA+Ph4tGzZUqm91q1bIyMjA//880/ZBV0MHx8fpKWliUtycvIHPyYRERGVDz7ntIKKj4+Hra3te7VRkIwWlegKgqBUR0NDQywrkJOT817HLyCVSlXmBi4iIiL6sDhyWgGdPHkSV65cQd++fUu8z/nz58Wfc3NzERMTg3r16gEAHB0dERERoZR8RkREwNDQEDVq1ADw8rJ9SkqKuD09PR23b99WOoa2tjby8vLe6ZyIiIiocmByquaysrJw9+5d/Pvvv7h48SK+/vpr9OzZE927d8ewYcNK3M6GDRtw8OBBXLt2DV988QUeP34Mb29vAMCECROQnJyMSZMm4dq1a/j111+xaNEiTJs2DRoaLz9CHTp0wPbt23H69GlcvXoVw4cPh6amptIxbGxsEBoairt37+Lx48dl1wlERERUYfCyvpo7evQoLC0toaWlhSpVqqBhw4ZYt24dhg8fLiaOJeHv74/ly5fj0qVLqFWrFn799VdUrVoVAFCjRg0cPnwYM2fORMOGDWFiYoKRI0di/vz54v4+Pj64desWunfvDrlcDl9f30IjpytXrsS0adOwZcsW1KhRo1Q3bBEREVHlIBFenyhIFY6lpSV8fX0xatSo8g6lTKSnp0MulyMtLQ1GRkblHQ4RERGVQEm/vzlyWoE9e/YMZ8+exb1791C/fv3yDoeIiIjorTjntAL74Ycf8Pnnn2Pq1KlKj4oiIiIiUlW8rE9qh5f1iYiI1E9Jv785ckpEREREKoPJKRERERGpDCanRERERKQymJwSERERkcpgckpEREREKoPJKRERERGpDCanRERERKQymJwSERERkcpgckpEREREKoPJKRERERGpDCanRERERKQymJwSERERkcrQKu8AiEpLEAQAQHp6ejlHQkRERCVV8L1d8D1eHCanpHZSU1MBAAqFopwjISIiotJ6+vQp5HJ5sduZnJLaMTExAQAkJSW98cNN7y89PR0KhQLJyckwMjIq73AqLPbzx8O+/njY1x+PuvS1IAh4+vQpqlev/sZ6TE5J7WhovJwqLZfLVfqPsCIx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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.barh(y=df_test[\"#3_country_label\"].value_counts().sort_values(ascending=True).index,\n",
    "         width=df_test[\"#3_country_label\"].value_counts().sort_values(ascending=True))\n",
    "plt.title(\"Value counts of country label in test data\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Some countries don't have a lot of observations, which means that it might be harder to detect their dialects. We need to take this into consideration when training and evaluating the model (by assigning weights/oversampling, and by choosing appropriate evaluation metrics)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Training the Classifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For this classifier, we will convert the tweets into vector embeddings using the AraBART model. We will use the last hidden layer of the model to extract the features"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 Data Preparation\n",
    "The first step is to prepare our data by tokenizing it to use it with the model AraBART."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, we load the model and its tokenizer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.device"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "device = torch.device(\"cpu\")\n",
    "type(device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = AutoModel.from_pretrained(\"moussaKam/AraBART\").to(device)\n",
    "tokenizer = AutoTokenizer.from_pretrained(\"moussaKam/AraBART\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we convert the datasets into a DatasetDict object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "mapper = {\"#2_tweet\": \"tweet\", \"#3_country_label\": \"label\"}\n",
    "columns_to_keep = [\"tweet\", \"label\"]\n",
    "\n",
    "df_train = df_train.rename(columns=mapper)[columns_to_keep]\n",
    "df_test = df_test.rename(columns=mapper)[columns_to_keep]\n",
    "\n",
    "train_dataset = Dataset.from_pandas(df_train)\n",
    "test_dataset = Dataset.from_pandas(df_test)\n",
    "data = DatasetDict({'train': train_dataset, 'test': test_dataset})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, we tokenkize the dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "                                                                   \r"
     ]
    }
   ],
   "source": [
    "def tokenize(batch):\n",
    "  return tokenizer(batch[\"tweet\"], padding=True)\n",
    "\n",
    "data_encoded = data.map(tokenize, batched=True, batch_size=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['tweet', 'label', 'input_ids', 'attention_mask']"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_encoded[\"train\"].column_names"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 Feature Extraction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we will extract the output of the last hidden layer of AraBART, and use those embeddings as the features of our classifier."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def extract_hidden_states(batch):\n",
    "  inputs = {k:v.to(device) for k,v in batch.items()\n",
    "            if k in tokenizer.model_input_names}\n",
    "  with torch.no_grad():\n",
    "    last_hidden_state = model(**inputs).last_hidden_state\n",
    "\n",
    "  return{\"hidden_state\": last_hidden_state[:,0].cpu().numpy()}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "                                                                   \r"
     ]
    }
   ],
   "source": [
    "data_encoded.set_format(\"torch\", columns=[\"input_ids\", \"attention_mask\", \"label\"])\n",
    "data_hidden = data_encoded.map(extract_hidden_states, batched=True, batch_size=50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"../data/data_hidden.pkl\", \"wb\") as f:\n",
    "    pickle.dump(data_hidden, f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"../data/data_hidden.pkl\", \"rb\") as f:\n",
    "    data_hidden = pickle.load(f)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 Model Training"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we only need to convert the data into numpy arrays, and we are ready to train the models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((21000, 768), (21000,))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train = np.array(data_hidden[\"train\"][\"hidden_state\"])\n",
    "X_test = np.array(data_hidden[\"test\"][\"hidden_state\"])\n",
    "y_train = np.array(data_hidden[\"train\"][\"label\"])\n",
    "y_test = np.array(data_hidden[\"test\"][\"label\"])\n",
    "\n",
    "X_train.shape, y_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can try different models.  \n",
    "\n",
    "For the ensemble models, we can do a randomized or grid search to tune the hyperparameters. We will use a 5-fold cross validation strategy, and optimize for the macro averaged f1 score (because we want to give an equal importance to each class, regardless of how many observations each one has)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3.1 Logistic Regression "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {color: black;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(class_weight=&#x27;balanced&#x27;, max_iter=1000,\n",
       "                   multi_class=&#x27;multinomial&#x27;, random_state=2024)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression(class_weight=&#x27;balanced&#x27;, max_iter=1000,\n",
       "                   multi_class=&#x27;multinomial&#x27;, random_state=2024)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression(class_weight='balanced', max_iter=1000,\n",
       "                   multi_class='multinomial', random_state=2024)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_model = LogisticRegression(multi_class='multinomial', \n",
    "                              class_weight=\"balanced\", \n",
    "                              max_iter=1000, \n",
    "                              random_state=2024)\n",
    "lr_model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3.2 Random Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-3 {color: black;}#sk-container-id-3 pre{padding: 0;}#sk-container-id-3 div.sk-toggleable {background-color: white;}#sk-container-id-3 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-3 label.sk-toggleable__label-arrow:before {content: \"\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-3 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-3 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-3 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"\";}#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-3 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-3 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-3 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-3 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-3 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-3 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-3 div.sk-item {position: relative;z-index: 1;}#sk-container-id-3 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-3 div.sk-item::before, #sk-container-id-3 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-3 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-3 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-3 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-3 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-3 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-3 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-3 div.sk-label-container {text-align: center;}#sk-container-id-3 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-3 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomizedSearchCV(cv=5,\n",
       "                   estimator=RandomForestClassifier(class_weight=&#x27;balanced&#x27;,\n",
       "                                                    random_state=2024),\n",
       "                   n_iter=20,\n",
       "                   param_distributions={&#x27;max_depth&#x27;: [3, 4, 5, 6, 7, 8],\n",
       "                                        &#x27;n_estimators&#x27;: [100, 150, 200, 250,\n",
       "                                                         300, 400, 500]},\n",
       "                   scoring=&#x27;f1_macro&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomizedSearchCV</label><div class=\"sk-toggleable__content\"><pre>RandomizedSearchCV(cv=5,\n",
       "                   estimator=RandomForestClassifier(class_weight=&#x27;balanced&#x27;,\n",
       "                                                    random_state=2024),\n",
       "                   n_iter=20,\n",
       "                   param_distributions={&#x27;max_depth&#x27;: [3, 4, 5, 6, 7, 8],\n",
       "                                        &#x27;n_estimators&#x27;: [100, 150, 200, 250,\n",
       "                                                         300, 400, 500]},\n",
       "                   scoring=&#x27;f1_macro&#x27;)</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" ><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier(class_weight=&#x27;balanced&#x27;, random_state=2024)</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" ><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier(class_weight=&#x27;balanced&#x27;, random_state=2024)</pre></div></div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "RandomizedSearchCV(cv=5,\n",
       "                   estimator=RandomForestClassifier(class_weight='balanced',\n",
       "                                                    random_state=2024),\n",
       "                   n_iter=20,\n",
       "                   param_distributions={'max_depth': [3, 4, 5, 6, 7, 8],\n",
       "                                        'n_estimators': [100, 150, 200, 250,\n",
       "                                                         300, 400, 500]},\n",
       "                   scoring='f1_macro')"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_model = RandomForestClassifier(class_weight=\"balanced\", random_state=2024)\n",
    "parameters = {\n",
    "    \"n_estimators\": [100, 150, 200, 250, 300, 400, 500],\n",
    "    \"max_depth\": [3, 4, 5, 6, 7, 8]\n",
    "}\n",
    "rf_search = RandomizedSearchCV(estimator=rf_model, param_distributions=parameters, \n",
    "                         scoring=\"f1_macro\", cv=5, n_iter=20)\n",
    "rf_search.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best Parameters: {'n_estimators': 400, 'max_depth': 8}\n",
      "Best Score: 0.15591886021384346\n"
     ]
    }
   ],
   "source": [
    "print(\"Best Parameters:\", rf_search.best_params_)\n",
    "print(\"Best Score:\", rf_search.best_score_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3.3 XGBoost"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For XGBoost, we first need to encode the target variable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "label_encoder = LabelEncoder()\n",
    "y_train_encoded = label_encoder.fit_transform(y_train)\n",
    "y_test_encoded = label_encoder.transform(y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb_model = xgb.XGBClassifier(device=\"cuda\", seed=2024)\n",
    "parameters = {\n",
    "    \"n_estimators\" : [100, 150, 200, 300, 400, 450, 500],\n",
    "    \"max_depth\" : [3, 4, 5, 6, 7, 8],\n",
    "    \"learning_rate\": [0.1, 0.05, 0.01, 0.005, 0.001]\n",
    "}\n",
    "xgb_search = RandomizedSearchCV(estimator=xgb_model, param_distributions=parameters,\n",
    "                                scoring=\"f1_macro\", cv=5, n_iter=20)\n",
    "xgb_search.fit(X_train, y_train_encoded)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(\"Best Parameters:\", xgb_search.best_params_)\n",
    "print(\"Best Score (Macro Average F1):\", xgb_search.best_score_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3.4 LightGBM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Evaluating the Performance"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "adc",
   "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.1.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}