{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7488bb72-2f2c-4455-bd9f-1fbd8c9db896",
   "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>PatientID</th>\n",
       "      <th>Age</th>\n",
       "      <th>Gender</th>\n",
       "      <th>Ethnicity</th>\n",
       "      <th>SocioeconomicStatus</th>\n",
       "      <th>EducationLevel</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Smoking</th>\n",
       "      <th>AlcoholConsumption</th>\n",
       "      <th>PhysicalActivity</th>\n",
       "      <th>...</th>\n",
       "      <th>Itching</th>\n",
       "      <th>QualityOfLifeScore</th>\n",
       "      <th>HeavyMetalsExposure</th>\n",
       "      <th>OccupationalExposureChemicals</th>\n",
       "      <th>WaterQuality</th>\n",
       "      <th>MedicalCheckupsFrequency</th>\n",
       "      <th>MedicationAdherence</th>\n",
       "      <th>HealthLiteracy</th>\n",
       "      <th>Diagnosis</th>\n",
       "      <th>DoctorInCharge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>71</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>31.069414</td>\n",
       "      <td>1</td>\n",
       "      <td>5.128112</td>\n",
       "      <td>1.676220</td>\n",
       "      <td>...</td>\n",
       "      <td>7.556302</td>\n",
       "      <td>76.076800</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1.018824</td>\n",
       "      <td>4.966808</td>\n",
       "      <td>9.871449</td>\n",
       "      <td>1</td>\n",
       "      <td>Confidential</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>34</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>29.692119</td>\n",
       "      <td>1</td>\n",
       "      <td>18.609552</td>\n",
       "      <td>8.377574</td>\n",
       "      <td>...</td>\n",
       "      <td>6.836766</td>\n",
       "      <td>40.128498</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.923538</td>\n",
       "      <td>8.189275</td>\n",
       "      <td>7.161765</td>\n",
       "      <td>1</td>\n",
       "      <td>Confidential</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>80</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>37.394822</td>\n",
       "      <td>1</td>\n",
       "      <td>11.882429</td>\n",
       "      <td>9.607401</td>\n",
       "      <td>...</td>\n",
       "      <td>2.144722</td>\n",
       "      <td>92.872842</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1.429906</td>\n",
       "      <td>7.624028</td>\n",
       "      <td>7.354632</td>\n",
       "      <td>1</td>\n",
       "      <td>Confidential</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>31.329680</td>\n",
       "      <td>0</td>\n",
       "      <td>16.020165</td>\n",
       "      <td>0.408871</td>\n",
       "      <td>...</td>\n",
       "      <td>7.077188</td>\n",
       "      <td>90.080321</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.226416</td>\n",
       "      <td>3.282688</td>\n",
       "      <td>6.629587</td>\n",
       "      <td>1</td>\n",
       "      <td>Confidential</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>43</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>23.726311</td>\n",
       "      <td>0</td>\n",
       "      <td>7.944146</td>\n",
       "      <td>0.780319</td>\n",
       "      <td>...</td>\n",
       "      <td>3.553118</td>\n",
       "      <td>5.258372</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.285466</td>\n",
       "      <td>3.849498</td>\n",
       "      <td>1.437385</td>\n",
       "      <td>1</td>\n",
       "      <td>Confidential</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 54 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   PatientID  Age  Gender  Ethnicity  SocioeconomicStatus  EducationLevel  \\\n",
       "0          1   71       0          0                    0               2   \n",
       "1          2   34       0          0                    1               3   \n",
       "2          3   80       1          1                    0               1   \n",
       "3          4   40       0          2                    0               1   \n",
       "4          5   43       0          1                    1               2   \n",
       "\n",
       "         BMI  Smoking  AlcoholConsumption  PhysicalActivity  ...   Itching  \\\n",
       "0  31.069414        1            5.128112          1.676220  ...  7.556302   \n",
       "1  29.692119        1           18.609552          8.377574  ...  6.836766   \n",
       "2  37.394822        1           11.882429          9.607401  ...  2.144722   \n",
       "3  31.329680        0           16.020165          0.408871  ...  7.077188   \n",
       "4  23.726311        0            7.944146          0.780319  ...  3.553118   \n",
       "\n",
       "   QualityOfLifeScore  HeavyMetalsExposure  OccupationalExposureChemicals  \\\n",
       "0           76.076800                    0                              0   \n",
       "1           40.128498                    0                              0   \n",
       "2           92.872842                    0                              1   \n",
       "3           90.080321                    0                              0   \n",
       "4            5.258372                    0                              0   \n",
       "\n",
       "   WaterQuality  MedicalCheckupsFrequency  MedicationAdherence  \\\n",
       "0             1                  1.018824             4.966808   \n",
       "1             0                  3.923538             8.189275   \n",
       "2             1                  1.429906             7.624028   \n",
       "3             0                  3.226416             3.282688   \n",
       "4             1                  0.285466             3.849498   \n",
       "\n",
       "   HealthLiteracy  Diagnosis  DoctorInCharge  \n",
       "0        9.871449          1    Confidential  \n",
       "1        7.161765          1    Confidential  \n",
       "2        7.354632          1    Confidential  \n",
       "3        6.629587          1    Confidential  \n",
       "4        1.437385          1    Confidential  \n",
       "\n",
       "[5 rows x 54 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# قراءة الملف\n",
    "df = pd.read_csv(\"Chronic_Kidney_Dsease_data.csv\")\n",
    "\n",
    "# عرض أول 5 صفوف\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8c03fc19-0baf-4e43-a6b3-8d81b5064ef0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PatientID                        0.0\n",
       "Edema                            0.0\n",
       "SerumElectrolytesPhosphorus      0.0\n",
       "HemoglobinLevels                 0.0\n",
       "CholesterolTotal                 0.0\n",
       "CholesterolLDL                   0.0\n",
       "CholesterolHDL                   0.0\n",
       "CholesterolTriglycerides         0.0\n",
       "ACEInhibitors                    0.0\n",
       "Diuretics                        0.0\n",
       "NSAIDsUse                        0.0\n",
       "Statins                          0.0\n",
       "AntidiabeticMedications          0.0\n",
       "FatigueLevels                    0.0\n",
       "Age                              0.0\n",
       "NauseaVomiting                   0.0\n",
       "MuscleCramps                     0.0\n",
       "Itching                          0.0\n",
       "QualityOfLifeScore               0.0\n",
       "HeavyMetalsExposure              0.0\n",
       "OccupationalExposureChemicals    0.0\n",
       "WaterQuality                     0.0\n",
       "MedicalCheckupsFrequency         0.0\n",
       "MedicationAdherence              0.0\n",
       "HealthLiteracy                   0.0\n",
       "Diagnosis                        0.0\n",
       "SerumElectrolytesCalcium         0.0\n",
       "SerumElectrolytesPotassium       0.0\n",
       "SerumElectrolytesSodium          0.0\n",
       "ACR                              0.0\n",
       "Gender                           0.0\n",
       "Ethnicity                        0.0\n",
       "SocioeconomicStatus              0.0\n",
       "EducationLevel                   0.0\n",
       "BMI                              0.0\n",
       "Smoking                          0.0\n",
       "AlcoholConsumption               0.0\n",
       "PhysicalActivity                 0.0\n",
       "DietQuality                      0.0\n",
       "SleepQuality                     0.0\n",
       "FamilyHistoryKidneyDisease       0.0\n",
       "FamilyHistoryHypertension        0.0\n",
       "FamilyHistoryDiabetes            0.0\n",
       "PreviousAcuteKidneyInjury        0.0\n",
       "UrinaryTractInfections           0.0\n",
       "SystolicBP                       0.0\n",
       "DiastolicBP                      0.0\n",
       "FastingBloodSugar                0.0\n",
       "HbA1c                            0.0\n",
       "SerumCreatinine                  0.0\n",
       "BUNLevels                        0.0\n",
       "GFR                              0.0\n",
       "ProteinInUrine                   0.0\n",
       "DoctorInCharge                   0.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# حساب نسبة القيم المفقودة في كل عمود\n",
    "missing_percentage = df.isnull().mean() * 100\n",
    "\n",
    "# عرض الأعمدة مع نسب القيم المفقودة\n",
    "missing_percentage.sort_values(ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f2dd9ed0-caf0-427f-a7c5-ad5d203c0bc4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "📌 تم حذف الأعمدة التالية بسبب ارتفاع نسبة القيم المفقودة:\n",
      "Index([], dtype='object')\n"
     ]
    }
   ],
   "source": [
    "# حذف الأعمدة التي تحتوي على أكثر من 30% من القيم المفقودة\n",
    "columns_to_drop = missing_percentage[missing_percentage > 30].index\n",
    "df.drop(columns=columns_to_drop, inplace=True)\n",
    "\n",
    "print(\"📌 تم حذف الأعمدة التالية بسبب ارتفاع نسبة القيم المفقودة:\")\n",
    "print(columns_to_drop)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "4c196c6b-80c7-447c-a7ca-a1b4a93a9a9e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
    "from sklearn.preprocessing import StandardScaler, LabelEncoder\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.metrics import classification_report, confusion_matrix, accuracy_score, precision_score, recall_score, f1_score\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "12cca0a2-b5b9-4853-a728-0b6ab0e70b88",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# تعويض القيم الرقمية بالمتوسط\n",
    "for column in df.select_dtypes(include=['float64', 'int64']).columns:\n",
    "    df[column] = df[column].fillna(df[column].mean())\n",
    "\n",
    "# تعويض القيم النصية بالقيمة الأكثر تكراراً (mode)\n",
    "for column in df.select_dtypes(include=['object']).columns:\n",
    "    df[column] = df[column].fillna(df[column].mode()[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "abd7f4d5-2909-4e02-a4d3-ee82ac2b35d4",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df.drop(\"PatientID\", axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "2bd3b3e5-7fde-4b3a-887a-73bfd4e0e9d6",
   "metadata": {},
   "outputs": [],
   "source": [
    "label_encoders = {}\n",
    "for column in df.select_dtypes(include=['object']).columns:\n",
    "    le = LabelEncoder()\n",
    "    df[column] = le.fit_transform(df[column])\n",
    "    label_encoders[column] = le"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "2b4f7ffc-5a7f-442b-b675-3da16db16f89",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(\"Diagnosis\", axis=1)\n",
    "y = df[\"Diagnosis\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "594b71b0-cfbc-4f40-8cda-4bd625480851",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n",
    "\n",
    "scaler = StandardScaler()\n",
    "X_train = scaler.fit_transform(X_train)\n",
    "X_test = scaler.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "07603027-835f-48ff-a399-673539515dd9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 5 folds for each of 24 candidates, totalling 120 fits\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=5, estimator=RandomForestClassifier(random_state=42), n_jobs=-1,\n",
       "             param_grid={&#x27;max_depth&#x27;: [None, 10, 20],\n",
       "                         &#x27;min_samples_leaf&#x27;: [1, 2],\n",
       "                         &#x27;min_samples_split&#x27;: [2, 5],\n",
       "                         &#x27;n_estimators&#x27;: [100, 200]},\n",
       "             scoring=&#x27;accuracy&#x27;, verbose=1)</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 fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=5, estimator=RandomForestClassifier(random_state=42), n_jobs=-1,\n",
       "             param_grid={&#x27;max_depth&#x27;: [None, 10, 20],\n",
       "                         &#x27;min_samples_leaf&#x27;: [1, 2],\n",
       "                         &#x27;min_samples_split&#x27;: [2, 5],\n",
       "                         &#x27;n_estimators&#x27;: [100, 200]},\n",
       "             scoring=&#x27;accuracy&#x27;, verbose=1)</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 fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">best_estimator_: RandomForestClassifier</label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(random_state=42)</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted 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 fitted sk-toggleable__label-arrow fitted\">&nbsp;RandomForestClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(random_state=42)</pre></div> </div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "GridSearchCV(cv=5, estimator=RandomForestClassifier(random_state=42), n_jobs=-1,\n",
       "             param_grid={'max_depth': [None, 10, 20],\n",
       "                         'min_samples_leaf': [1, 2],\n",
       "                         'min_samples_split': [2, 5],\n",
       "                         'n_estimators': [100, 200]},\n",
       "             scoring='accuracy', verbose=1)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "# إنشاء النموذج الأساسي\n",
    "rf = RandomForestClassifier(random_state=42)\n",
    "\n",
    "# إعداد الشبكة الخاصة بالمعاملات\n",
    "param_grid = {\n",
    "    'n_estimators': [100, 200],\n",
    "    'max_depth': [None, 10, 20],\n",
    "    'min_samples_split': [2, 5],\n",
    "    'min_samples_leaf': [1, 2]\n",
    "}\n",
    "\n",
    "# إنشاء GridSearchCV\n",
    "grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, scoring='accuracy', verbose=1, n_jobs=-1)\n",
    "\n",
    "# تدريب النموذج\n",
    "grid_search.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "cc6aaa2e-5926-46d6-bcd9-da433f8f7f57",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ أفضل معاملات:\n",
      "{'max_depth': None, 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 100}\n",
      "\n",
      "📊 Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      0.02      0.05        43\n",
      "           1       0.92      1.00      0.96       455\n",
      "\n",
      "    accuracy                           0.92       498\n",
      "   macro avg       0.96      0.51      0.50       498\n",
      "weighted avg       0.92      0.92      0.88       498\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAHFCAYAAABb+zt/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9h0lEQVR4nO3de1iVVf7//9eWwxYQUVBBzHNkmsewHClDQy2P2dRo2ZimHUxrIg815qSWJWqmleapPJQdtMl0nDKTMkkHLTSttKamwtSvEHkWREBcvz/8uT9tQQXbiy3s5+O67utqr3vd9/2+N5t4+15r3dthjDECAACwpJK3AwAAABUbyQYAALCKZAMAAFhFsgEAAKwi2QAAAFaRbAAAAKtINgAAgFUkGwAAwCqSDQAAYBXJRgXw9ddf65577lHDhg1VuXJlValSRVdffbWmTp2qgwcPWr32tm3bFB8fr7CwMDkcDr3wwgsev4bD4dCECRM8ft4LWbx4sRwOhxwOh9avX19kvzFGl19+uRwOhzp27HhR15g9e7YWL15cqmPWr19/zpjKwpn35MxWtWpVxcXF6e233/ZKPJK0a9cuORyOUr+XNjVo0KDIe3Vmy87O9nZ4RaSmpmrChAk6fPiwt0NBBeTv7QDwx7zyyisaNmyYmjRpotGjR6tZs2YqKCjQli1bNHfuXG3atEkrVqywdv3BgwcrJydHS5cuVfXq1dWgQQOPX2PTpk267LLLPH7ekgoNDdWCBQuKJBQpKSn66aefFBoaetHnnj17tmrUqKFBgwaV+Jirr75amzZtUrNmzS76un/U7bffrpEjR8oYo/T0dE2aNEn9+/eXMUb9+/f3WlyXmuuuu07Tpk0r0h4cHOyFaM4vNTVVTz31lAYNGqRq1ap5OxxUMCQb5dimTZv04IMPqkuXLlq5cqWcTqdrX5cuXTRy5EitWbPGagw7duzQfffdp27dulm7xp/+9Cdr5y6Jfv366c0339TLL7+sqlWrutoXLFig9u3b6+jRo2USR0FBgauS4O33JDIy0hVD+/btdd1116lBgwaaN28eycbvVKtWzcrPyhijEydOKCgoyOPnBmxgGKUcmzRpkhwOh+bPn++WaJwRGBio3r17u16fOnVKU6dO1ZVXXimn06latWrp7rvv1t69e92O69ixo5o3b660tDR16NBBwcHBatSokSZPnqxTp05J+r8hhpMnT2rOnDmu8rAkTZgwwfXfv3fmmF27drna1q1bp44dOyoiIkJBQUGqV6+ebrvtNh0/ftzVp7hhlB07duiWW25R9erVVblyZbVu3VqvvfaaW58zww1vv/22xo4dq+joaFWtWlWdO3fW999/X7I3WdKdd94pSW7DBEeOHNHy5cs1ePDgYo956qmn1K5dO4WHh6tq1aq6+uqrtWDBAv3+ew8bNGignTt3KiUlxfX+nakMnYl9yZIlGjlypOrUqSOn06kff/yxyDDK/v37VbduXcXFxamgoMB1/m+//VYhISEaMGBAie/1YtWvX181a9bUr7/+6ta+bNkyde3aVbVr11ZQUJCaNm2qv//978rJyXHrN2jQIFWpUkU//vijunfvripVqqhu3boaOXKk8vLy3Pru27dPffv2VWhoqMLCwtSvXz9lZmYWG9eqVavUvn17BQcHKzQ0VF26dNGmTZvc+pz5vH799df6y1/+orCwMIWHh2vEiBE6efKkvv/+e918880KDQ1VgwYNNHXqVA+8Y6cdPHhQw4YNU506dRQYGKhGjRpp7NixRe7Z4XDooYce0ty5c9W0aVM5nU7X5/1///uf+vfvr1q1asnpdKpp06Z6+eWX3Y4/deqUnnnmGTVp0kRBQUGqVq2aWrZsqRdffNH1HowePVqS1LBhw/MOHwIXxaBcOnnypAkODjbt2rUr8TH333+/kWQeeughs2bNGjN37lxTs2ZNU7duXfPbb7+5+sXHx5uIiAgTExNj5s6da5KTk82wYcOMJPPaa68ZY4zJysoymzZtMpLM7bffbjZt2mQ2bdpkjDFm/PjxpriP1qJFi4wkk56ebowxJj093VSuXNl06dLFrFy50qxfv968+eabZsCAAebQoUOu4ySZ8ePHu17/97//NaGhoaZx48bm9ddfNx988IG58847jSQzZcoUV79PP/3USDINGjQwd911l/nggw/M22+/berVq2diYmLMyZMnz/t+nYk3LS3NDBgwwFx77bWufXPmzDEhISHm6NGj5qqrrjLx8fFuxw4aNMgsWLDAJCcnm+TkZDNx4kQTFBRknnrqKVefL7/80jRq1Mi0adPG9f59+eWXbrHXqVPH3H777WbVqlXm/fffNwcOHHDt+/TTT13n2rhxo/H39zePPvqoMcaYnJwc06xZM3PllVea7Ozs895naUkyw4cPd2s7fPiw8fPzM7169XJrnzhxopkxY4b54IMPzPr1683cuXNNw4YNTadOndz6DRw40AQGBpqmTZuaadOmmY8//tiMGzfOOBwOt/fs+PHjpmnTpiYsLMzMnDnTfPTRR+Zvf/ubqVevnpFkFi1a5Or75ptvGkmma9euZuXKlWbZsmUmNjbWBAYGmg0bNrj6nfm8NmnSxEycONEkJyebxx57zPW7cuWVV5qXXnrJJCcnm3vuucdIMsuXL7/g+1S/fn3TvXt3U1BQ4LYVFhYaY4zJzc01LVu2NCEhIWbatGlm7dq15sknnzT+/v6me/fuRd7zOnXqmJYtW5q33nrLrFu3zuzYscPs3LnThIWFmRYtWpjXX3/drF271owcOdJUqlTJTJgwwXV8UlKS8fPzM+PHjzeffPKJWbNmjXnhhRdcffbs2WMefvhhI8m89957rs/jkSNHLnifQEmQbJRTmZmZRpK54447StT/u+++M5LMsGHD3No///xzI8k88cQTrrb4+HgjyXz++edufZs1a2Zuuukmt7bi/vCUNNl49913jSSzffv288Z+drJxxx13GKfTaXbv3u3Wr1u3biY4ONgcPnzYGPN/f7DP/h/3O++8YyS5kqNz+X2yceZcO3bsMMYYc80115hBgwYZY0yxycbvFRYWmoKCAvP000+biIgIc+rUKde+cx175no33HDDOff9PtkwxpgpU6YYSWbFihVm4MCBJigoyHz99dfnvceLceZzVFBQYPLz880PP/xgevfubUJDQ82WLVvOedypU6dMQUGBSUlJMZLMV1995do3cOBAI8m88847bsd0797dNGnSxPV6zpw5RpL517/+5dbvvvvuc0s2CgsLTXR0tGnRooXrj7sxxhw7dszUqlXLxMXFudrOfF6ff/55t3O2bt3a9cf3jIKCAlOzZk3z5z//+YLvU/369Y2kItvYsWONMcbMnTu32Hs+83Ncu3atq02SCQsLMwcPHnTre9NNN5nLLrusSFLw0EMPmcqVK7v69+zZ07Ru3fq88T733HNuv5+AJzGM4iM+/fRTSSoyEfHaa69V06ZN9cknn7i1R0VF6dprr3Vra9mypX755RePxdS6dWsFBgbq/vvv12uvvaaff/65RMetW7dOCQkJqlu3rlv7oEGDdPz48SJl8t8PJUmn70NSqe4lPj5ejRs31sKFC/XNN98oLS3tnEMoZ2Ls3LmzwsLC5Ofnp4CAAI0bN04HDhxQVlZWia972223lbjv6NGj1aNHD91555167bXXNHPmTLVo0eKCx508edJtM78b6jmX2bNnKyAgQIGBgbriiiv04Ycf6u2331ZsbKxbv59//ln9+/dXVFSU632Ij4+XJH333XdufR0Oh3r16uXWdvZn7tNPP1VoaGiRn+nZ80S+//577du3TwMGDFClSv/3v7kqVarotttu0+bNm92G6iSpZ8+ebq+bNm0qh8PhNh/J399fl19+eYk/O9dff73S0tLctmHDhkk6/RkJCQnR7bff7nbMmd/Rs38nb7zxRlWvXt31+sSJE/rkk0906623Kjg42O1n2L17d504cUKbN2+WdPr3/KuvvtKwYcP00Ucfldk8I+AMko1yqkaNGgoODlZ6enqJ+h84cECSVLt27SL7oqOjXfvPiIiIKNLP6XQqNzf3IqItXuPGjfXxxx+rVq1aGj58uBo3bqzGjRu7xpHP5cCBA+e8jzP7f+/sezkzv6U09+JwOHTPPffojTfe0Ny5c3XFFVeoQ4cOxfb94osv1LVrV0mnVwv95z//UVpamsaOHVvq6xZ3n+eLcdCgQTpx4oSioqJKNFdj165dCggIcNtSUlIueFzfvn2Vlpam1NRUzZs3T6Ghobrjjjv0v//9z9UnOztbHTp00Oeff65nnnlG69evV1pamt577z1JRd+H4OBgVa5c2a3N6XTqxIkTrtcHDhxQZGRkkXiioqLcXl/o837q1CkdOnTIrT08PNztdWBgYLExBQYGusV0PmFhYWrbtq3b9vvPaVRUVJH5TbVq1ZK/v3+Rz/HZ93LgwAGdPHlSM2fOLPIz7N69u6TT83kkacyYMZo2bZo2b96sbt26KSIiQgkJCdqyZUuJ7gP4o1iNUk75+fkpISFBH374ofbu3XvBpaFn/uBmZGQU6btv3z7VqFHDY7Gd+Z9zXl6e28TVM//j+70OHTqoQ4cOKiws1JYtWzRz5kwlJiYqMjJSd9xxR7Hnj4iIUEZGRpH2ffv2SZJH7+X3Bg0apHHjxmnu3Ll69tlnz9lv6dKlCggI0Pvvv+/2h2rlypWlvmZxE23PJSMjQ8OHD1fr1q21c+dOjRo1Si+99NJ5j4mOjlZaWppbW5MmTS54rZo1a6pt27aSTq9Gadq0qeLj4/Xoo4/q/fffl3T6X+779u3T+vXrXdUMSX/oOQ4RERH64osvirSfPUH095/3s+3bt0+VKlVyqxJ4Q0REhD7//HMZY9x+zllZWTp58mSRz/HZn4Xq1avLz89PAwYM0PDhw4u9RsOGDSWdrsiMGDFCI0aM0OHDh/Xxxx/riSee0E033aQ9e/ZckktxUbFQ2SjHxowZI2OM7rvvPuXn5xfZX1BQoH//+9+STpdgJemNN95w65OWlqbvvvtOCQkJHovrzIqKr7/+2q39TCzF8fPzU7t27Vyz6L/88stz9k1ISHD9Ifu9119/XcHBwdaWhdapU0ejR49Wr169NHDgwHP2czgc8vf3l5+fn6stNzdXS5YsKdLXU9WiwsJC3XnnnXI4HPrwww+VlJSkmTNnuqoI5xIYGFjkX94X89yQDh066O6779YHH3zgGsY688fx7JVS8+bNK/X5z+jUqZOOHTumVatWubW/9dZbbq+bNGmiOnXq6K233nIbFsrJydHy5ctdK1S8KSEhQdnZ2UWS0Ndff921/3yCg4PVqVMnbdu2TS1btizyc2zbtm2xFcpq1arp9ttv1/Dhw3Xw4EHX6rCLqfgBJUVloxxr37695syZo2HDhik2NlYPPvigrrrqKhUUFGjbtm2aP3++mjdvrl69eqlJkya6//77NXPmTFWqVEndunXTrl279OSTT6pu3bp69NFHPRZX9+7dFR4eriFDhujpp5+Wv7+/Fi9erD179rj1mzt3rtatW6cePXqoXr16OnHihBYuXChJ6ty58znPP378eL3//vvq1KmTxo0bp/DwcL355pv64IMPNHXqVIWFhXnsXs42efLkC/bp0aOHpk+frv79++v+++/XgQMHNG3atGKXJ7do0UJLly7VsmXL1KhRI1WuXLlE8yzONn78eG3YsEFr165VVFSURo4cqZSUFA0ZMkRt2rRx/QvXpokTJ2rZsmV68skn9fHHHysuLk7Vq1fX0KFDNX78eAUEBOjNN9/UV199ddHXuPvuuzVjxgzdfffdevbZZxUTE6PVq1fro48+cutXqVIlTZ06VXfddZd69uypBx54QHl5eXruued0+PDhEv0cbbv77rv18ssva+DAgdq1a5datGihjRs3atKkSerevft5fwfOePHFF3X99derQ4cOevDBB9WgQQMdO3ZMP/74o/79739r3bp1kqRe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hYeHq169el6MDLCLpa+wZvbs2Zo6daoyMjLUvHlzzZgxQzfccIO3wwK8Zv369erUqVOR9oEDB2rx4sVlHxBQRkg2AACAVczZAAAAVpFsAAAAq0g2AACAVSQbAADAKpINAABgFckGAACwimQDAABYRbIBVEATJkxQ69atXa8HDRqkPn36lHkcu3btksPh0Pbt28v82gAuHSQbQBkaNGiQHA6HHA6HAgIC1KhRI40aNUo5OTlWr/viiy+W+AmVJAgAPI3vRgHK2M0336xFixapoKBAGzZs0L333qucnBzNmTPHrV9BQYECAgI8cs2wsDCPnAcALgaVDaCMOZ1ORUVFqW7duurfv7/uuusurVy50jX0sXDhQjVq1EhOp1PGGB05ckT333+/atWqpapVq+rGG2/UV1995XbOyZMnKzIyUqGhoRoyZIhOnDjhtv/sYZRTp05pypQpuvzyy+V0OlWvXj09++yzkqSGDRtKktq0aSOHw6GOHTu6jlu0aJGaNm2qypUr68orr9Ts2bPdrvPFF1+oTZs2qly5stq2batt27Z58J0DUF5R2QC8LCgoSAUFBZKkH3/8Ue+8846WL18uPz8/SVKPHj0UHh6u1atXKywsTPPmzVNCQoJ++OEHhYeH65133tH48eP18ssvq0OHDlqyZIleeuklNWrU6JzXHDNmjF555RXNmDFD119/vTIyMvTf//5X0umE4dprr9XHH3+sq666SoGBgZKkV155RePHj9esWbPUpk0bbdu2Tffdd59CQkI0cOBA5eTkqGfPnrrxxhv1xhtvKD09XY888ojldw9AuWAAlJmBAweaW265xfX6888/NxEREaZv375m/PjxJiAgwGRlZbn2f/LJJ6Zq1armxIkTbudp3LixmTdvnjHGmPbt25uhQ4e67W/Xrp1p1apVsdc9evSocTqd5pVXXik2xvT0dCPJbNu2za29bt265q233nJrmzhxomnfvr0xxph58+aZ8PBwk5OT49o/Z86cYs8FwLcwjAKUsffff19VqlRR5cqV1b59e91www2aOXOmJKl+/fqqWbOmq+/WrVuVnZ2tiIgIValSxbWlp6frp59+kiR99913at++vds1zn79e999953y8vKUkJBQ4ph/++037dmzR0OGDHGL45lnnnGLo1WrVgoODi5RHAB8B8MoQBnr1KmT5syZo4CAAEVHR7tNAg0JCXHre+rUKdWuXVvr168vcp5q1apd1PWDgoJKfcypU6cknR5Kadeundu+M8M9xpiLigdAxUeyAZSxkJAQXX755SXqe/XVVyszM1P+/v5q0KBBsX2aNm2qzZs36+6773a1bd68+ZznjImJUVBQkD755BPde++9RfafmaNRWFjoaouMjFSdOnX0888/66677ir2vM2aNdOSJUuUm5vrSmjOFwcA38EwCnAJ69y5s9q3b68+ffroo48+0q5du5Samqp//OMf2rJliyTpkUce0cKFC7Vw4UL98MMPGj9+vHbu3HnOc1auXFmPP/64HnvsMb3++uv66aeftHnzZi1YsECSVKtWLQUFBWnNmjX69ddfdeTIEUmnHxSWlJSkF198UT/88IO++eYbLVq0SNOnT5ck9e/fX5UqVdKQIUP07bffavXq1Zo2bZrldwhAeUCyAVzCHA6HVq9erRtuuEGDBw/WFVdcoTvuuEO7du1SZGSkJKlfv34aN26cHn/8ccXGxuqXX37Rgw8+eN7zPvnkkxo5cqTGjRunpk2bql+/fsrKypIk+fv766WXXtK8efMUHR2tW265RZJ077336tVXX9XixYvVokULxcfHa/Hixa6lslWqVNG///1vffvtt2rTpo3Gjh2rKVOmWHx3AJQXDsNAKwAAsIjKBgAAsIpkAwAAWEWyAQAArCLZAAAAVpFsAAAAq0g2AACAVSQbAADAKpINAABgFckGAACwimQDAABYRbIBAACsItkAAABW/X/2YO3hWfkhDwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report, confusion_matrix\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# استخدام أفضل نموذج\n",
    "best_model = grid_search.best_estimator_\n",
    "\n",
    "# التنبؤ على بيانات الاختبار\n",
    "y_pred = best_model.predict(X_test)\n",
    "\n",
    "# عرض أفضل معاملات\n",
    "print(\"✅ أفضل معاملات:\")\n",
    "print(grid_search.best_params_)\n",
    "\n",
    "# تقرير التصنيف\n",
    "print(\"\\n📊 Classification Report:\")\n",
    "print(classification_report(y_test, y_pred))\n",
    "\n",
    "# مصفوفة الالتباس\n",
    "cm = confusion_matrix(y_test, y_pred)\n",
    "sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')\n",
    "plt.title(\"Confusion Matrix - Random Forest\")\n",
    "plt.xlabel(\"Predicted\")\n",
    "plt.ylabel(\"Actual\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "f65b6dc6-4418-4095-841d-7d20168b8011",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "# إعداد النموذج\n",
    "log_reg = LogisticRegression(solver='liblinear', random_state=42)\n",
    "\n",
    "# شبكة المعاملات (hyperparameters)\n",
    "param_grid = {\n",
    "    'penalty': ['l1', 'l2'],\n",
    "    'C': [0.01, 0.1, 1, 10]\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "b2ae4595-8733-485b-9ee5-e55a6669b00c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 5 folds for each of 8 candidates, totalling 40 fits\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-2 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-2 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-2 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-2 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-2 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=5,\n",
       "             estimator=LogisticRegression(random_state=42, solver=&#x27;liblinear&#x27;),\n",
       "             n_jobs=-1,\n",
       "             param_grid={&#x27;C&#x27;: [0.01, 0.1, 1, 10], &#x27;penalty&#x27;: [&#x27;l1&#x27;, &#x27;l2&#x27;]},\n",
       "             scoring=&#x27;accuracy&#x27;, verbose=1)</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 fitted 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 fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=5,\n",
       "             estimator=LogisticRegression(random_state=42, solver=&#x27;liblinear&#x27;),\n",
       "             n_jobs=-1,\n",
       "             param_grid={&#x27;C&#x27;: [0.01, 0.1, 1, 10], &#x27;penalty&#x27;: [&#x27;l1&#x27;, &#x27;l2&#x27;]},\n",
       "             scoring=&#x27;accuracy&#x27;, verbose=1)</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 fitted 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 fitted sk-toggleable__label-arrow fitted\">best_estimator_: LogisticRegression</label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(C=0.1, penalty=&#x27;l1&#x27;, random_state=42, solver=&#x27;liblinear&#x27;)</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" ><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(C=0.1, penalty=&#x27;l1&#x27;, random_state=42, solver=&#x27;liblinear&#x27;)</pre></div> </div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "GridSearchCV(cv=5,\n",
       "             estimator=LogisticRegression(random_state=42, solver='liblinear'),\n",
       "             n_jobs=-1,\n",
       "             param_grid={'C': [0.01, 0.1, 1, 10], 'penalty': ['l1', 'l2']},\n",
       "             scoring='accuracy', verbose=1)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search_lr = GridSearchCV(estimator=log_reg, param_grid=param_grid, cv=5, scoring='accuracy', verbose=1, n_jobs=-1)\n",
    "\n",
    "# تدريب النموذج\n",
    "grid_search_lr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "649ee702-d8a2-4527-b490-6686e3c98650",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ أفضل معاملات - Logistic Regression:\n",
      "{'C': 0.1, 'penalty': 'l1'}\n",
      "\n",
      "📊 Classification Report - Logistic Regression:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      0.02      0.05        43\n",
      "           1       0.92      1.00      0.96       455\n",
      "\n",
      "    accuracy                           0.92       498\n",
      "   macro avg       0.96      0.51      0.50       498\n",
      "weighted avg       0.92      0.92      0.88       498\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAHFCAYAAABb+zt/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/wElEQVR4nO3de3zP9f//8ft7p/cOtrFhs6KcSySmfKacD+WsDx+KilKR8rEQSZkOny3y5ZNzKpQOq0/i0wFRahEKUej0rSyJmfNh2Gaevz/8vL+9bWPT+7m37X27urwuF3u+nu/n6/F+bW8eezyfr9fLYYwxAgAAsMTP2wEAAICyjWQDAABYRbIBAACsItkAAABWkWwAAACrSDYAAIBVJBsAAMAqkg0AAGAVyQYAALCKZMPLvv32W919992qXr26goODVa5cOTVu3FgTJ07UgQMHrB5706ZNatmypSIjI+VwOPTvf//b48dwOBwaP368x8e9kPnz58vhcMjhcOizzz7Lt98Yo1q1asnhcKhVq1YXdYyZM2dq/vz5xXrNZ599VmhMJcHhcOihhx4q0WOe/V6kp6cX63XJyclavHhxvnZPnsP09HTXz4nD4ZCfn58qVKigtm3bavny5X95/NLC2z+XKPsCvB2AL3vxxRc1ZMgQ1a1bV4888ojq1aun3NxcbdiwQbNnz9batWu1aNEia8e/5557lJWVpdTUVFWoUEFXXnmlx4+xdu1aXX755R4ft6jCw8P18ssv50so0tLS9Msvvyg8PPyix545c6YqVqyoAQMGFPk1jRs31tq1a1WvXr2LPm5p07lzZ61du1ZVqlQp1uuSk5PVq1cv9ejRw63dxjkcOnSo+vbtq7y8PP3www968skn1alTJ61cuVItWrTw2HEuVb74c4mSRbLhJWvXrtUDDzyg9u3ba/HixXI6na597du314gRI7Rs2TKrMWzdulX33XefOnbsaO0Yf/vb36yNXRR9+vTR66+/rhkzZigiIsLV/vLLLyshIUFHjhwpkThyc3PlcDgUERHh9XNS0ipVqqRKlSp5bDwb57BatWquMW+88UbVrl1bLVu21Msvv1ziycbx48cVGhpaosf0xZ9LlCymUbwkOTlZDodDc+bMcUs0zgoKClK3bt1cX58+fVoTJ07UVVddJafTqcqVK+uuu+7Szp073V7XqlUr1a9fX+vXr1fz5s0VGhqqGjVq6Nlnn9Xp06cl/V9Z+9SpU5o1a5arhCxJ48ePd/39zwoqha9cuVKtWrVSdHS0QkJCVK1aNfXs2VPHjx939SloGmXr1q3q3r27KlSooODgYF133XV65ZVX3PqcLeu++eabGjt2rOLi4hQREaF27drpxx9/LNpJlnT77bdLkt58801X2+HDh7Vw4ULdc889Bb7mySefVNOmTRUVFaWIiAg1btxYL7/8sv78zMIrr7xS27ZtU1pamuv8na0MnY19wYIFGjFihC677DI5nU79/PPP+crV+/btU9WqVdWsWTPl5ua6xv/uu+8UFhamO++8s8jv1VMOHDigIUOG6LLLLlNQUJBq1KihsWPHKjs7263foUOHNHDgQEVFRalcuXLq3Lmzfv3113zf84J+djZt2qQuXbqocuXKcjqdiouLU+fOnV0/zw6HQ1lZWXrllVdc5/dsdaqwkv+XX36prl27Kjo6WsHBwapZs6YSExMv6hw0adJEkrRnzx639oyMDA0aNEiXX365goKCVL16dT355JM6deqUW7+dO3eqV69eCg8PV/ny5dWvXz+tX79eDofDbeptwIABKleunLZs2aIOHTooPDxcbdu2lSTl5OTomWeecX3mK1WqpLvvvlt79+51O1ZRPoezZs1Sw4YNVa5cOYWHh+uqq67SY4895tpf2Dl97733lJCQoNDQUIWHh6t9+/Zau3atW5+z/2Zs27ZNt99+uyIjIxUTE6N77rlHhw8fLt6JR5lFZcML8vLytHLlSsXHx6tq1apFes0DDzygOXPm6KGHHlKXLl2Unp6uJ554Qp999pm+/vprVaxY0dU3IyND/fr104gRI5SUlKRFixZpzJgxiouL01133eUqayckJKhXr14aMWJEsd9Denq6OnfurObNm2vu3LkqX768/vjjDy1btkw5OTmF/mb2448/qlmzZqpcubKmTp2q6OhovfbaaxowYID27NmjUaNGufV/7LHHdOONN+qll17SkSNHNHr0aHXt2lXff/+9/P39LxhnRESEevXqpblz52rQoEGSziQefn5+6tOnT4HrVNLT0zVo0CBVq1ZNkrRu3ToNHTpUf/zxh8aNGydJWrRokXr16qXIyEjNnDlTkvIljWPGjFFCQoJmz54tPz8/Va5cWRkZGW59KlasqNTUVLVq1UqjR4/W5MmTdfz4cf3jH/9QtWrVNHv27Au+R086efKkWrdurV9++UVPPvmkrr32Wq1atUopKSnavHmzPvzwQ0lnkt+uXbtqw4YNGj9+vKsMf8stt1zwGFlZWWrfvr2qV6+uGTNmKCYmRhkZGfr000919OhRSWcqf23atFHr1q31xBNPSJJbZepcH330kbp27aqrr75akydPVrVq1ZSenn7R6y62b98uSapTp46rLSMjQzfccIP8/Pw0btw41axZU2vXrtUzzzyj9PR0zZs3z/X+WrdurQMHDmjChAmqVauWli1bpj59+hR4rJycHHXr1k2DBg3So48+qlOnTun06dPq3r27Vq1apVGjRqlZs2b67bfflJSUpFatWmnDhg0KCQkp0ucwNTVVQ4YM0dChQzVp0iT5+fnp559/1nfffXfec/DGG2+oX79+6tChg958801lZ2dr4sSJatWqlT755BPddNNNbv179uypPn36aODAgdqyZYvGjBkjSZo7d+5FfQ9QxhiUuIyMDCPJ3HbbbUXq//333xtJZsiQIW7tX375pZFkHnvsMVdby5YtjSTz5ZdfuvWtV6+eufnmm93aJJkHH3zQrS0pKckU9GMxb948I8ls377dGGPMO++8YySZzZs3nzd2SSYpKcn19W233WacTqfZsWOHW7+OHTua0NBQc+jQIWOMMZ9++qmRZDp16uTW7+233zaSzNq1a8973LPxrl+/3jXW1q1bjTHGXH/99WbAgAHGGGOuueYa07Jly0LHycvLM7m5ueapp54y0dHR5vTp0659hb327PFatGhR6L5PP/3UrX3ChAlGklm0aJHp37+/CQkJMd9+++153+PFKOh7/mezZ882kszbb79dYHzLly83xhjz4YcfGklm1qxZbv1SUlLyfc/P/dnZsGGDkWQWL1583ljDwsJM//7987UXdA5r1qxpatasaU6cOHHeMc+1fft2I8lMmDDB5ObmmpMnT5rNmzebhIQEU6VKFVfMxhgzaNAgU65cOfPbb7+5jTFp0iQjyWzbts0YY8yMGTOMJLN06VK3foMGDTKSzLx581xt/fv3N5LM3Llz3fq++eabRpJZuHChW/v69euNJDNz5kxjTNE+hw899JApX778ec/Duec0Ly/PxMXFmQYNGpi8vDxXv6NHj5rKlSubZs2audrO/psxceJEtzGHDBligoOD3T4z8F1Mo5QCn376qSTlW4h4ww036Oqrr9Ynn3zi1h4bG6sbbrjBre3aa6/Vb7/95rGYrrvuOgUFBen+++/XK6+8ol9//bVIr1u5cqXatm2br6IzYMAAHT9+PF+J9s9TSdKZ9yGpWO+lZcuWqlmzpubOnastW7Zo/fr1hU6hnI2xXbt2ioyMlL+/vwIDAzVu3Djt379fmZmZRT5uz549i9z3kUceUefOnXX77bfrlVde0bRp09SgQYMLvu7UqVNum/nTVM/FWLlypcLCwtSrVy+39rM/e2d/1tLS0iRJvXv3dut3dtrqfGrVqqUKFSpo9OjRmj179gV/w76Qn376Sb/88osGDhyo4ODgixpj9OjRCgwMdE3rbd26Ve+//77boukPPvhArVu3VlxcnNs5P7vm6ew5SUtLU3h4eL4qz/nOzbk/Kx988IHKly+vrl27uh3ruuuuU2xsrGu6oyifwxtuuEGHDh3S7bffrv/+97/at2/fBc/Hjz/+qF27dunOO++Un9///TdRrlw59ezZU+vWrXObppEK/qyePHmyWJ8ZlF0kG15QsWJFhYaGukq1F7J//35JKnA1f1xcnGv/WdHR0fn6OZ1OnThx4iKiLVjNmjX18ccfq3LlynrwwQdVs2ZN1axZU88///x5X7d///5C38fZ/X927ns5O1VRnPficDh0991367XXXtPs2bNVp04dNW/evMC+X331lTp06CDpzNVCX3zxhdavX6+xY8cW+7jFufrC4XBowIABOnnypGJjY4u0ViM9PV2BgYFu29n/8C7W/v37FRsbm2/dTuXKlRUQEOD6/uzfv18BAQGKiopy6xcTE3PBY0RGRiotLU3XXXedHnvsMV1zzTWKi4tTUlKS27qVojq7huGvXPU0bNgwrV+/XqtXr9akSZOUm5ur7t27u/087tmzR++//36+c37NNddIkus/8f379xd4Hgo7N6GhofmmiPbs2aNDhw4pKCgo3/EyMjJcxyrK5/DOO+/U3Llz9dtvv6lnz56qXLmymjZtqhUrVhR6Pi70b87p06d18OBBt3ZPfFZRdrFmwwv8/f3Vtm1bLV26VDt37rzgP5JnP8S7d+/O13fXrl1u6zX+qrO/GWZnZ7utQSjot6HmzZurefPmysvL04YNGzRt2jQlJiYqJiZGt912W4HjR0dHa/fu3fnad+3aJUkefS9/NmDAAI0bN06zZ8/Wv/71r0L7paamKjAwUB988IHbb8kF3e/hQgpaaFuY3bt368EHH9R1112nbdu2aeTIkZo6dep5XxMXF6f169e7tdWtW7fYcf5ZdHS0vvzySxlj3OLPzMzUqVOnXN+f6OhonTp1SgcOHHBLOM5dk1KYBg0aKDU1VcYYffvtt5o/f76eeuophYSE6NFHHy1WzGevdDl3sXRxXH755a5FoTfeeKNiY2N1xx13KCkpSdOnT5d05mfz2muvLfTn52zCHB0dra+++irf/sLOTUE/JxUrVlR0dHShV6T9+ZLtonwO7777bt19993KysrS559/rqSkJHXp0kU//fSTrrjiinzj//nfnHPt2rXLdT8SoKiobHjJmDFjZIzRfffdp5ycnHz7c3Nz9f7770uS2rRpI0l67bXX3PqsX79e33//vWv1uiecLRt/++23bu1nYymIv7+/mjZtqhkzZkiSvv7660L7tm3bVitXrnQlF2e9+uqrCg0NtXb53WWXXaZHHnlEXbt2Vf/+/Qvt53A4FBAQ4Lb49MSJE1qwYEG+vp6qFuXl5en222+Xw+HQ0qVLlZKSomnTpundd9897+uCgoLUpEkTt+2v3DdEOvP9OXbsWL7k6tVXX3Xtl85MTUnSW2+95dYvNTW1WMdzOBxq2LChpkyZovLly7v97BT1/NapU8c1TXbuFTMXq1+/fmrVqpVefPFF15Rdly5dtHXrVtWsWTPfeW/SpIkr2WjZsqWOHj2qpUuXuo1ZnHPTpUsX7d+/X3l5eQUeq6Cksiifw7CwMHXs2FFjx45VTk6Otm3bVuDx69atq8suu0xvvPGG29RcVlaWFi5c6LpCBSgqKhtekpCQoFmzZmnIkCGKj4/XAw88oGuuuUa5ubnatGmT5syZo/r166tr166qW7eu7r//fk2bNk1+fn7q2LGj62qUqlWr6uGHH/ZYXJ06dVJUVJQGDhyop556SgEBAZo/f75+//13t36zZ8/WypUr1blzZ1WrVk0nT550rTpv165doeMnJSW55r7HjRunqKgovf766/rwww81ceJERUZGeuy9nOvZZ5+9YJ/OnTtr8uTJ6tu3r+6//37t379fkyZNKvDy5LO/nb/11luqUaOGgoODi7TO4lxJSUlatWqVli9frtjYWI0YMUJpaWkaOHCgGjVqpOrVqxd7zPP55Zdf9M477+Rrr1evnu666y7NmDFD/fv3V3p6uho0aKDVq1crOTlZnTp1cn1vb7nlFt14440aMWKEjhw5ovj4eK1du9aVlPx5nv9cH3zwgWbOnKkePXqoRo0aMsbo3Xff1aFDh9S+fXtXvwYNGuizzz7T+++/rypVqig8PLzQys2MGTPUtWtX/e1vf9PDDz+satWqaceOHfroo4/0+uuvX9R5mjBhgpo2baqnn35aL730kp566imtWLFCzZo10z//+U/VrVtXJ0+eVHp6upYsWaLZs2fr8ssvV//+/TVlyhTdcccdeuaZZ1SrVi0tXbpUH3300QXPzVm33XabXn/9dXXq1EnDhg3TDTfcoMDAQO3cuVOffvqpunfvrltvvbVIn8P77rtPISEhuvHGG1WlShVlZGQoJSVFkZGRuv766ws8vp+fnyZOnKh+/fqpS5cuGjRokLKzs/Xcc8/p0KFDRfosAW68uToVxmzevNn079/fVKtWzQQFBZmwsDDTqFEjM27cOJOZmenql5eXZyZMmGDq1KljAgMDTcWKFc0dd9xhfv/9d7fxWrZsaa655pp8x+nfv7+54oor3NpUyJUJX331lWnWrJkJCwszl112mUlKSjIvvfSS2xUFa9euNbfeequ54oorjNPpNNHR0aZly5bmvffey3eMP1+ZYIwxW7ZsMV27djWRkZEmKCjINGzY0G2FvjH/tzr+P//5j1v72asHzu1/rj9fjXI+BV1RMnfuXFO3bl3jdDpNjRo1TEpKinn55Zfd3r8xxqSnp5sOHTqY8PBwI8l1fguL/c/7zq76X758ufHz88t3jvbv32+qVatmrr/+epOdnX3e91Ackgrdzsawf/9+M3jwYFOlShUTEBBgrrjiCjNmzBhz8uRJt7EOHDhg7r77blO+fHkTGhpq2rdvb9atW2ckmeeff97V79yrUX744Qdz++23m5o1a5qQkBATGRlpbrjhBjN//ny38Tdv3mxuvPFGExoaaiS5vk+FXdGzdu1a07FjRxMZGWmcTqepWbOmefjhh897Ps7+PD333HMF7v/HP/5hAgICzM8//2yMMWbv3r3mn//8p6levboJDAw0UVFRJj4+3owdO9YcO3bM9bodO3aYv//976ZcuXImPDzc9OzZ0yxZssRIMv/9739d/fr372/CwsIKPHZubq6ZNGmSadiwoQkODjblypUzV111lRk0aJD5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pKQkjR8/vtDXnLuw1BhT4nc0LZNrNnBpOHLkiCIjI3X48GFFRER4OxzgksFnAxerOJWNnJwchYaG6j//+Y9uvfVWV/uwYcO0efNmpaWlWY/3LNZsAABQSjidTkVERLhthVXHgoKCFB8frxUrVri1r1ixQs2aNSuJcF3K5DQKAACQhg8frjvvvFNNmjRRQkKC5syZox07dmjw4MElGgfJBgAAZVSfPn20f/9+PfXUU9q9e7fq16+vJUuW6IorrijROEg2YI3T6VRSUhIL4IBz8NlASRoyZIiGDBni1RhYIAoAAKxigSgAALCKZAMAAFhFsgEAAKwi2QAAAFaRbMCamTNnqnr16goODlZ8fLxWrVrl7ZAAr/r888/VtWtXxcXFyeFwaPHixd4OCSgRJBuw4q233lJiYqLGjh2rTZs2qXnz5urYsaN27Njh7dAAr8nKylLDhg01ffp0b4cClCgufYUVTZs2VePGjTVr1ixX29VXX60ePXooJSXFi5EBlwaHw6FFixapR48e3g4FsI7KBjwuJydHGzduVIcOHdzaO3TooDVr1ngpKgCAt5BswOP27dunvLw8xcTEuLXHxMQoIyPDS1EBALyFZAPWOBwOt6+NMfnaAABlH8kGPK5ixYry9/fPV8XIzMzMV+0AAJR9JBvwuKCgIMXHx2vFihVu7StWrFCzZs28FBUAwFt46iusGD58uO688041adJECQkJmjNnjnbs2KHBgwd7OzTAa44dO6aff/7Z9fX27du1efNmRUVFqVq1al6MDLCLS19hzcyZMzVx4kTt3r1b9evX15QpU9SiRQtvhwV4zWeffabWrVvna+/fv7/mz59f8gEBJYRkAwAAWMWaDQAAYBXJBgAAsIpkAwAAWEWyAQAArCLZAAAAVpFsAAAAq0g2AACAVSQbQBk0fvx4XXfdda6vBwwYoB49epR4HOnp6XI4HNq8eXOJHxvApYNkAyhBAwYMkMPhkMPhUGBgoGrUqKGRI0cqKyvL6nGff/75It+hkgQBgKfxbBSghN1yyy2aN2+ecnNztWrVKt17773KysrSrFmz3Prl5uYqMDDQI8eMjIz0yDgAcDGobAAlzOl0KjY2VlWrVlXfvn3Vr18/LV682DX1MXfuXNWoUUNOp1PGGB0+fFj333+/KleurIiICLVp00bffPON25jPPvusYmJiFB4eroEDB+rkyZNu+8+dRjl9+rQmTJigWrVqyel0qlq1avrXv/4lSapevbokqVGjRnI4HGrVqpXrdfPmzdPVV1+t4OBgXXXVVZo5c6bbcb766is1atRIwcHBatKkiTZt2uTBMwegtKKyAXhZSEiIcnNzJUk///yz3n77bS1cuFD+/v6SpM6dOysqKkpLlixRZGSkXnjhBbVt21Y//fSToqKi9PbbbyspKUkzZsxQ8+bNtWDBAk2dOlU1atQo9JhjxozRiy++qClTpuimm27S7t279cMPP0g6kzDccMMN+vjjj3XNNdcoKChIkvTiiy8qKSlJ06dPV6NGjbRp0ybdd999CgsLU//+/ZWVlaUuXbqoTZs2eu2117R9+3YNGzbM8tkDUCoYACWmf//+pnv37q6vv/zySxMdHW169+5tkpKSTGBgoMnMzHTt/+STT0xERIQ5efKk2zg1a9Y0L7zwgjHGmISEBDN48GC3/U2bNjUNGzYs8LhHjhwxTqfTvPjiiwXGuH37diPJbNq0ya29atWq5o033nBre/rpp01CQoIxxpgXXnjBREVFmaysLNf+WbNmFTgWAN/CNApQwj744AOVK1dOwcHBSkhIUIsWLTRt2jRJ0hVXXKFKlSq5+m7cuFHHjh1TdHS0ypUr59q2b9+uX375RZL0/fffKyEhwe0Y5379Z99//72ys7PVtm3bIse8d+9e/f777xo4cKBbHM8884xbHA0bNlRoaGiR4gDgO5hGAUpY69atNWvWLAUGBiouLs5tEWhYWJhb39OnT6tKlSr67LPP8o1Tvnz5izp+SEhIsV9z+vRpSWemUpo2beq27+x0jzHmouIBUPaRbAAlLCwsTLVq1SpS38aNGysjI0MBAQG68sorC+xz9dVXa926dbrrrrtcbevWrSt0zNq1ayskJESffPKJ7r333nz7z67RyMvLc7XFxMTosssu06+//qp+/foVOG69evW0YMECnThxwpXQnC8OAL6DaRTgEtauXTslJCSoR48e+uijj5Senq41a9bo8ccf14YNGyRJw4YN09y5czV37lz99NNPSkpK0rZt2wodMzg4WKNHj9aoUaP06quv6pdfftG6dev08ssvS5IqV66skJAQLVu2THv27NHhw4clnblRWEpKip5//nn99NNP2rJli+bNm6fJkydLkvr27Ss/Pz8NHDhQ3333nZYsWaJJkyZZPkMASgOSDeAS5nA4tGTJErVo0UL33HOP6tSpo9tuu03p6emKiYmRJPXp00fjxo3T6NGjFR8fr99++00PPPDAecd94oknNGLECI0bN05XX321+vTpo8zMTElSQECApk6dqhdeeEFxcXHq3r27JOnee+/VSy+9pPnz56tBgwZq2bKl5s+f77pUtly5cnr//ff13XffqVGjRho7dqwmTJhg8ewAKC0cholWAABgEZUNAABgFckGAACwimQDAABYRbIBAACsItkAAABWkWwAAACrSDYAAIBVJBsAAMAqkg0AAGAVyQYAALCKZAMAAFhFsgEAAKz6f6QPjkUsuWFvAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# أفضل نموذج\n",
    "best_log_model = grid_search_lr.best_estimator_\n",
    "\n",
    "# التنبؤ\n",
    "y_pred_lr = best_log_model.predict(X_test)\n",
    "\n",
    "# عرض أفضل المعاملات\n",
    "print(\"✅ أفضل معاملات - Logistic Regression:\")\n",
    "print(grid_search_lr.best_params_)\n",
    "\n",
    "# تقرير التصنيف\n",
    "print(\"\\n📊 Classification Report - Logistic Regression:\")\n",
    "print(classification_report(y_test, y_pred_lr))\n",
    "\n",
    "# مصفوفة الالتباس\n",
    "cm = confusion_matrix(y_test, y_pred_lr)\n",
    "sns.heatmap(cm, annot=True, fmt='d', cmap='Greens')\n",
    "plt.title(\"Confusion Matrix - Logistic Regression\")\n",
    "plt.xlabel(\"Predicted\")\n",
    "plt.ylabel(\"Actual\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "c2dfda08-f8a1-4a31-a859-a99d482c6fc7",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "# إنشاء النموذج\n",
    "dt = DecisionTreeClassifier(random_state=42)\n",
    "\n",
    "# شبكة المعاملات\n",
    "param_grid = {\n",
    "    'max_depth': [None, 5, 10, 20],\n",
    "    'min_samples_split': [2, 5, 10],\n",
    "    'min_samples_leaf': [1, 2, 4]\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "cae66962-70e9-4ebe-a501-54d4083cb11b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 5 folds for each of 36 candidates, totalling 180 fits\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-3 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-3 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-3 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-3 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-3 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-3 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=5, estimator=DecisionTreeClassifier(random_state=42), n_jobs=-1,\n",
       "             param_grid={&#x27;max_depth&#x27;: [None, 5, 10, 20],\n",
       "                         &#x27;min_samples_leaf&#x27;: [1, 2, 4],\n",
       "                         &#x27;min_samples_split&#x27;: [2, 5, 10]},\n",
       "             scoring=&#x27;accuracy&#x27;, verbose=1)</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 fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" ><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=5, estimator=DecisionTreeClassifier(random_state=42), n_jobs=-1,\n",
       "             param_grid={&#x27;max_depth&#x27;: [None, 5, 10, 20],\n",
       "                         &#x27;min_samples_leaf&#x27;: [1, 2, 4],\n",
       "                         &#x27;min_samples_split&#x27;: [2, 5, 10]},\n",
       "             scoring=&#x27;accuracy&#x27;, verbose=1)</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 fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-8\" type=\"checkbox\" ><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">best_estimator_: DecisionTreeClassifier</label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier(max_depth=5, random_state=42)</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-9\" type=\"checkbox\" ><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;DecisionTreeClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier(max_depth=5, random_state=42)</pre></div> </div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "GridSearchCV(cv=5, estimator=DecisionTreeClassifier(random_state=42), n_jobs=-1,\n",
       "             param_grid={'max_depth': [None, 5, 10, 20],\n",
       "                         'min_samples_leaf': [1, 2, 4],\n",
       "                         'min_samples_split': [2, 5, 10]},\n",
       "             scoring='accuracy', verbose=1)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search_dt = GridSearchCV(estimator=dt, param_grid=param_grid, cv=5, scoring='accuracy', verbose=1, n_jobs=-1)\n",
    "\n",
    "# تدريب النموذج\n",
    "grid_search_dt.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "a57149fb-d4bf-4b82-9919-a71cbe6886a3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ أفضل معاملات - Decision Tree:\n",
      "{'max_depth': 5, 'min_samples_leaf': 1, 'min_samples_split': 2}\n",
      "\n",
      "📊 Classification Report - Decision Tree:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.47      0.33      0.38        43\n",
      "           1       0.94      0.96      0.95       455\n",
      "\n",
      "    accuracy                           0.91       498\n",
      "   macro avg       0.70      0.65      0.67       498\n",
      "weighted avg       0.90      0.91      0.90       498\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAHFCAYAAABb+zt/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABF6klEQVR4nO3df3zP9f7/8ft7v9622ZZt9ksIIRrSSNuJ+f37VylKiUhEaqEcnNg5dQwVhRBhKK1OmlRyKCEHnRGFfqkmHFtDfm3mvdle3z/6en9628bG+7U3e9+ul8vrcvF+vp6v1+vxehkeHs/n8/W2GIZhCAAAwCQerg4AAABUbCQbAADAVCQbAADAVCQbAADAVCQbAADAVCQbAADAVCQbAADAVCQbAADAVCQbAADAVCQbFdw333yjRx55RLVq1VKlSpVUuXJl3X777Zo+fbp+//13U6+9a9cuxcfHKygoSBaLRa+88orTr2GxWJSYmOj0815OcnKyLBaLLBaLNm7cWGS/YRi6+eabZbFY1Lp16yu6xty5c5WcnFymYzZu3FhiTOXhwjOxWCzy9PRUlSpV1KRJEw0bNkzbt283/fqtW7cu8/N2xTO7cM3SbEBF4OXqAGCehQsXasSIEapfv76eeeYZNWzYUPn5+dqxY4fmz5+vbdu2KTU11bTrDx48WDk5OUpJSVGVKlV00003Of0a27Zt04033uj085ZWQECAFi1aVOQfuE2bNunnn39WQEDAFZ977ty5Cg0N1aBBg0p9zO23365t27apYcOGV3zdq3XvvfdqzJgxMgxDp0+f1t69e7Vs2TItWLBATz75pF599VXTrj137twyH+OKZ3bhmn929913q06dOnrppZfKLQ6g3BiokLZu3Wp4enoanTt3Ns6dO1dkv81mMz744ANTY/Dy8jIef/xxU6/hKkuWLDEkGY8++qjh6+trnDp1ymH/Qw89ZMTGxhq33nqrER8ff0XXKMuxeXl5Rn5+/hVdx5kkGSNHjizSfv78eWPw4MGGJGPu3LkuiOzaV7NmTaNbt26X7FNYWGicPXu2nCICnIdhlApqypQpslgsWrBggaxWa5H9Pj4+6tmzp/1zYWGhpk+frltuuUVWq1VhYWF6+OGHdfjwYYfjWrdurejoaKWlpally5by8/NT7dq1NXXqVBUWFkr6vyGG8+fPa968eQ7l4MTExGJLwxeOOXDggL1tw4YNat26tUJCQuTr66saNWqoT58+Onv2rL1PccMoe/fuVa9evVSlShVVqlRJt912m5YuXerQ50IZ++2339bEiRMVFRWlwMBAtW/fXj/88EPpHrKkBx54QJL09ttv29tOnTqllStXavDgwcUe8/e//10tWrRQcHCwAgMDdfvtt2vRokUy/vSdiDfddJP27dunTZs22Z/fhcrQhdiXL1+uMWPGqFq1arJarfrpp5+KDAkcO3ZM1atXV1xcnPLz8+3n//bbb+Xv768BAwaU+l6vhqenp+bMmaPQ0FC9+OKLDvtOnz6tsWPHqlatWvLx8VG1atWUkJCgnJwch36FhYWaPXu2brvtNvn6+uqGG27QnXfeqdWrV9v7FDeMMm/ePDVp0kSVK1dWQECAbrnlFk2YMMG+v6RhlNWrVys2NlZ+fn4KCAhQhw4dilQjLvw879u3Tw888ICCgoIUHh6uwYMH69SpU1fxxP5gsVj0xBNPaP78+WrQoIGsVqv9Z3n//v3q37+/wsLCZLVa1aBBA7322mtFzlHa5wuYiWSjAiooKNCGDRsUExOj6tWrl+qYxx9/XOPGjVOHDh20evVqPf/881q7dq3i4uJ07Ngxh76ZmZl68MEH9dBDD2n16tXq0qWLxo8frzfffFOS1K1bN/tfyvfee6+2bdtW5C/pyzlw4IC6desmHx8fLV68WGvXrtXUqVPl7++vvLy8Eo/74YcfFBcXp3379mnWrFl6//331bBhQw0aNEjTp08v0n/ChAn69ddf9cYbb2jBggXav3+/evTooYKCglLFGRgYqHvvvVeLFy+2t7399tvy8PBQv379Sry3YcOG6d1339X777+ve+65R6NGjdLzzz9v75OamqratWuradOm9ud38ZDX+PHjdfDgQc2fP18ffvihwsLCilwrNDRUKSkpSktL07hx4yRJZ8+e1X333acaNWpo/vz5pbpPZ/D19VX79u2Vnp5uT2LPnj2r+Ph4LV26VE8++aQ++eQTjRs3TsnJyerZs6dDAjZo0CA99dRTat68ud555x2lpKSoZ8+eDgnqxVJSUjRixAjFx8crNTVVq1at0tNPP33Zf2hXrFihXr16KTAwUG+//bYWLVqkEydOqHXr1tqyZUuR/n369FG9evW0cuVK/fWvf9WKFSv09NNPX9mDusiqVas0b948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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# أفضل نموذج\n",
    "best_dt_model = grid_search_dt.best_estimator_\n",
    "\n",
    "# التنبؤ على بيانات الاختبار\n",
    "y_pred_dt = best_dt_model.predict(X_test)\n",
    "\n",
    "# عرض أفضل معاملات\n",
    "print(\"✅ أفضل معاملات - Decision Tree:\")\n",
    "print(grid_search_dt.best_params_)\n",
    "\n",
    "# تقرير التصنيف\n",
    "print(\"\\n📊 Classification Report - Decision Tree:\")\n",
    "print(classification_report(y_test, y_pred_dt))\n",
    "\n",
    "# مصفوفة الالتباس\n",
    "cm = confusion_matrix(y_test, y_pred_dt)\n",
    "sns.heatmap(cm, annot=True, fmt='d', cmap='Oranges')\n",
    "plt.title(\"Confusion Matrix - Decision Tree\")\n",
    "plt.xlabel(\"Predicted\")\n",
    "plt.ylabel(\"Actual\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "b595c5e9-3c23-45de-8e01-a9e37eb6cb74",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ أهم 10 ميزات باستخدام SelectKBest + chi2:\n",
      "Index(['SystolicBP', 'FastingBloodSugar', 'SerumCreatinine', 'BUNLevels',\n",
      "       'GFR', 'CholesterolTotal', 'CholesterolHDL', 'MuscleCramps', 'Itching',\n",
      "       'QualityOfLifeScore'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "from sklearn.feature_selection import SelectKBest, chi2\n",
    "\n",
    "# نستخدم chi2 فقط مع البيانات الموجبة، لذا نعيد التطبيع إلى بيانات بدون قيم سالبة\n",
    "X_positive = X.copy()\n",
    "X_positive[X_positive < 0] = 0  # chi2 لا يعمل مع القيم السالبة\n",
    "\n",
    "# اختيار أفضل 10 ميزات\n",
    "selector = SelectKBest(score_func=chi2, k=10)\n",
    "X_kbest = selector.fit_transform(X_positive, y)\n",
    "\n",
    "# أسماء الأعمدة المختارة\n",
    "selected_features_kbest = X.columns[selector.get_support()]\n",
    "print(\"✅ أهم 10 ميزات باستخدام SelectKBest + chi2:\")\n",
    "print(selected_features_kbest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "af961655-b6aa-48a0-a1b7-6b0c492dda4c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ أهم 10 ميزات باستخدام RFE + Random Forest:\n",
      "Index(['SystolicBP', 'FastingBloodSugar', 'SerumCreatinine', 'BUNLevels',\n",
      "       'GFR', 'ProteinInUrine', 'SerumElectrolytesSodium', 'CholesterolHDL',\n",
      "       'MuscleCramps', 'Itching'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "from sklearn.feature_selection import RFE\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "# إعداد النموذج\n",
    "model = RandomForestClassifier(random_state=42)\n",
    "\n",
    "# تطبيق RFE لاختيار 10 ميزات\n",
    "rfe = RFE(estimator=model, n_features_to_select=10)\n",
    "rfe.fit(X, y)\n",
    "\n",
    "# أسماء الأعمدة المختارة\n",
    "selected_features_rfe = X.columns[rfe.support_]\n",
    "print(\"✅ أهم 10 ميزات باستخدام RFE + Random Forest:\")\n",
    "print(selected_features_rfe)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "bcf07929-a270-4312-a7df-5bc41dfae7ed",
   "metadata": {},
   "outputs": [],
   "source": [
    "# تحديد الميزات التي اختارها SelectKBest\n",
    "X_selected = X[selected_features_kbest]\n",
    "\n",
    "# إعادة تقسيم البيانات وتطبيعها\n",
    "X_train_sel, X_test_sel, y_train_sel, y_test_sel = train_test_split(X_selected, y, test_size=0.3, random_state=42)\n",
    "\n",
    "scaler = StandardScaler()\n",
    "X_train_sel = scaler.fit_transform(X_train_sel)\n",
    "X_test_sel = scaler.transform(X_test_sel)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "54804861-4a28-4186-ac38-d2d3ad24cdcf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "📊 Classification Report - Random Forest (SelectKBest):\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.75      0.21      0.33        43\n",
      "           1       0.93      0.99      0.96       455\n",
      "\n",
      "    accuracy                           0.93       498\n",
      "   macro avg       0.84      0.60      0.64       498\n",
      "weighted avg       0.91      0.93      0.91       498\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAHFCAYAAABb+zt/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABSLUlEQVR4nO3deVhU1f8H8PewzLAIKNsMKCIqogYuYZmUAaIobmkWlmaQZplLkZh91VRsEbUSUwvU3DesTLNcEjMpQw3JBZdSE0sTRElREAeE8/vDh/vzyuJgcxll3q+e+zxx7rn3fmYY4OPnnHOvSgghQERERKQQC1MHQERERHUbkw0iIiJSFJMNIiIiUhSTDSIiIlIUkw0iIiJSFJMNIiIiUhSTDSIiIlIUkw0iIiJSFJMNIiIiUlSdTjYOHz6Ml156CT4+PrCxsUG9evXw8MMPY9asWfj3338VvfaBAwcQHBwMJycnqFQqzJkzx+jXUKlUiIuLM/p572bZsmVQqVRQqVTYtWtXhf1CCDRv3hwqlQohISH3dI3PPvsMy5Ytq9Exu3btqjKm2lD+npRvjo6OCAoKwtq1a00SDwCcOXMGKpWqxu+lkpo0aVLhvSrfCgoKTB1eBWlpaYiLi8OVK1dqdNzQoUPRo0cPWdvZs2cxcuRItGjRAra2tnB2dkZAQACGDx+Os2fP1jg2pT/z58+fR1xcHA4ePFhhX1xcHFQqFS5duiRr//PPP9G0aVNotVrpuOjoaNn32dLSEo0aNUJkZCSOHDmiSOwAcOzYMcTFxeHMmTMV9g0ZMgT9+vVT7NokZ2XqAJSyaNEijBw5En5+fnjrrbfQunVrlJSUYP/+/UhKSsKePXuwYcMGxa4/dOhQFBYWIjk5GQ0aNECTJk2Mfo09e/agUaNGRj+voRwcHLB48eIKCUVqair+/PNPODg43PO5P/vsM7i6uiI6OtrgYx5++GHs2bMHrVu3vufr/lfPPPMMYmNjIYRAVlYWpk+fjkGDBkEIgUGDBpksrvvN448/jo8++qhCu52dnQmiqV5aWhqmTZuG6Oho1K9f36BjDhw4gOXLl2Pfvn1S27lz5/Dwww+jfv36iI2NhZ+fH/Lz83Hs2DF88cUXOH36NLy8vBR6Fffm/PnzmDZtGpo0aYJ27drdtX9mZia6d+8Oa2tr7N69G76+vtI+W1tb7Ny5EwBw8+ZNnDp1Cu+//z6CgoJw/PhxNGzY0OjxHzt2DNOmTUNISEiF38FxcXFo2bIldu7ciS5duhj92iRXJ5ONPXv24LXXXkO3bt2wceNGaDQaaV+3bt0QGxuLbdu2KRrDkSNHMHz4cERERCh2jccee0yxcxti4MCBWL16NT799FM4OjpK7YsXL0anTp1w9erVWomjpKREqiSY+j3RarVSDJ06dcLjjz+OJk2aYMGCBUw2blO/fn1FvldCCNy4cQO2trZGP3dNzJgxA48++ig6dOggtS1atAiXLl3Cr7/+Ch8fH6m9X79+mDhxIsrKykwRqtHs3bsXPXv2hFarRUpKSoV/CFlYWMi+50888QQaN26MsLAwbN68Ga+88kqtxtusWTP06NEDM2bMYLJRC+rkMMr06dOhUqmwcOFCWaJRTq1Wo2/fvtLXZWVlmDVrFlq2bAmNRgN3d3e8+OKLOHfunOy4kJAQ+Pv7Iz09HZ07d4adnR2aNm2KGTNmSL8oyocYbt68icTERKlsCPx/2fFO5cfcXurbuXMnQkJC4OLiAltbWzRu3BgDBgzA9evXpT6VDaMcOXIETz31FBo0aAAbGxu0a9cOy5cvl/UpL72uXbsWkyZNgqenJxwdHdG1a1f88ccfhr3JAJ5//nkAkA0T5OfnY/369Rg6dGilx0ybNg0dO3aEs7MzHB0d8fDDD2Px4sW4/XmATZo0wdGjR5Gamiq9f+X/KimPfeXKlYiNjUXDhg2h0Whw6tSpCiXlS5cuwcvLC0FBQSgpKZHOf+zYMdjb22PIkCEGv9Z75e3tDTc3N1y4cEHWvm7dOoSHh8PDwwO2trZo1aoV/ve//6GwsFDWLzo6GvXq1cOpU6fQs2dP1KtXD15eXoiNjYVer5f1PX/+PCIjI+Hg4AAnJycMHDgQOTk5lca1adMmdOrUCXZ2dnBwcEC3bt2wZ88eWZ/yz+vhw4fx7LPPwsnJCc7Ozhg7dixu3ryJP/74Az169ICDgwOaNGmCWbNmGeEdu+Xff//FyJEj0bBhQ6jVajRt2hSTJk2q8JpVKhVGjx6NpKQktGrVChqNRvq8nzx5EoMGDYK7uzs0Gg1atWqFTz/9VHZ8WVkZ3n//ffj5+cHW1hb169dHmzZt8Mknn0jvwVtvvQUA8PHxqXb4sNyFCxewYcOGCp+vvLw8WFhYwN3dvdLjLCzkv47379+Pvn37wtnZGTY2Nmjfvj2++OKLu795NTj2n3/+wSuvvAIvLy+o1Wp4enrimWeewYULF7Br1y488sgjAICXXnpJeu2VDd2mpKSga9euaNasGX7++WeDK65OTk4AAGtra1l7Tk4OXn31VTRq1AhqtRo+Pj6YNm0abt68KeuXmJiItm3bol69enBwcEDLli0xceJEALd+rz777LMAgNDQUCn+24cUhwwZgh07duDPP/80KF76D0Qdc/PmTWFnZyc6duxo8DGvvPKKACBGjx4ttm3bJpKSkoSbm5vw8vISFy9elPoFBwcLFxcX4evrK5KSkkRKSooYOXKkACCWL18uhBAiNzdX7NmzRwAQzzzzjNizZ4/Ys2ePEEKIqVOnisre8qVLlwoAIisrSwghRFZWlrCxsRHdunUTGzduFLt27RKrV68WQ4YMEZcvX5aOAyCmTp0qff37778LBwcH0axZM7FixQqxefNm8fzzzwsAYubMmVK/H3/8UQAQTZo0EYMHDxabN28Wa9euFY0bNxa+vr7i5s2b1b5f5fGmp6eLIUOGiEcffVTal5iYKOzt7cXVq1fFQw89JIKDg2XHRkdHi8WLF4uUlBSRkpIi3nvvPWFrayumTZsm9fntt99E06ZNRfv27aX377fffpPF3rBhQ/HMM8+ITZs2ie+++07k5eVJ+3788UfpXLt37xZWVlbizTffFEIIUVhYKFq3bi1atmwpCgoKqn2dNQVAjBo1StZ25coVYWlpKfr06SNrf++990RCQoLYvHmz2LVrl0hKShI+Pj4iNDRU1i8qKkqo1WrRqlUr8dFHH4kdO3aIKVOmCJVKJXvPrl+/Llq1aiWcnJzEvHnzxPfffy9ef/110bhxYwFALF26VOq7evVqAUCEh4eLjRs3inXr1onAwEChVqvFzz//LPUr/7z6+fmJ9957T6SkpIjx48dLPystW7YUc+fOFSkpKeKll14SAMT69evv+j55e3uLnj17ipKSEtlWWloqhBCiqKhItGnTRtjb24uPPvpIbN++XUyePFlYWVmJnj17VnjPGzZsKNq0aSPWrFkjdu7cKY4cOSKOHj0qnJycREBAgFixYoXYvn27iI2NFRYWFiIuLk46Pj4+XlhaWoqpU6eKH374QWzbtk3MmTNH6nP27FkxZswYAUB8/fXX0ucxPz+/yte3YsUKAUAcO3ZM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0KFDlcZe3WexJsdGRETgxx9/rHYFmqGvvTzhePnll/Hxxx/LKhXVKSgowKlTp2QrdHr37o0jR46gWbNmlcZ/e7JRzt7eHhEREZg0aRKKi4tx9OhRg+K/efMmzp49a9J785iLOlfZAG79izIxMREjR45EYGAgXnvtNTz00EMoKSnBgQMHsHDhQvj7+6NPnz7w8/PDK6+8gnnz5sHCwgIRERE4c+YMJk+eDC8vL7z55ptGi6tnz55wdnbGsGHD8O6778LKygrLli2rcOfApKQk7Ny5E7169ULjxo1x48YNLFmyBADQtWvXKs8/depUabxzypQpcHZ2xurVq7F582bMmjVLWmamhBkzZty1T69evTB79mwMGjQIr7zyCvLy8vDRRx9Vujw5ICAAycnJWLduHZo2bQobGxuD5lncaerUqfj555+xfft26HQ6xMbGIjU1FcOGDUP79u1l9ztQynvvvYd169Zh8uTJ2LFjB4KCgtCgQQOMGDECU6dOhbW1NVavXi37111Nvfjii0hISMCLL76IDz74AL6+vtiyZQu+//57WT8LCwvMmjULgwcPRu/evfHqq69Cr9fjww8/xJUrVwz6PirtxRdfxKeffoqoqCicOXMGAQEB2L17N6ZPn46ePXtW+zNQ7pNPPsETTzyBzp0747XXXkOTJk1w7do1nDp1Ct9++610c6k+ffrA398fHTp0gJubG/766y/MmTMH3t7e0g2pyj93n3zyCaKiomBtbQ0/P78q/+CHhIRACIF9+/ZJw4YA8MEHH+CXX37BwIED0a5dO9ja2iIrKwvz589HXl4ePvzwQ6nvggULEBERge7duyM6OhoNGzbEv//+i+PHj+O3337Dl19+WeVrN/TYd999F1u3bsWTTz6JiRMnIiAgAFeuXMG2bdswduxYtGzZEs2aNYOtrS1Wr16NVq1aoV69evD09Kz0D3757QZUKhUSEhIghEBCQoK0v6ysTJorU1ZWhn/++Qdz587F5cuXZfM93n33XaSkpCAoKAivv/46/Pz8cOPGDZw5cwZbtmxBUlISGjVqhOHDh8PW1haPP/44PDw8kJOTg/j4eDg5OUlLdv39/QEACxcuhIODA2xsbODj4yMlm4cPH8b169cRGhpa5ftJRmLK2alKO3jwoIiKihKNGzcWarVa2Nvbi/bt24spU6bIlj+VlpaKmTNnihYt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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# إعادة استخدام أفضل نموذج Random Forest السابق\n",
    "best_rf = RandomForestClassifier(**grid_search.best_params_, random_state=42)\n",
    "best_rf.fit(X_train_sel, y_train_sel)\n",
    "\n",
    "# التنبؤ والتقييم\n",
    "y_pred_sel = best_rf.predict(X_test_sel)\n",
    "\n",
    "print(\"📊 Classification Report - Random Forest (SelectKBest):\")\n",
    "print(classification_report(y_test_sel, y_pred_sel))\n",
    "\n",
    "# مصفوفة الالتباس\n",
    "cm = confusion_matrix(y_test_sel, y_pred_sel)\n",
    "sns.heatmap(cm, annot=True, fmt='d', cmap='Purples')\n",
    "plt.title(\"Confusion Matrix - Random Forest (SelectKBest)\")\n",
    "plt.xlabel(\"Predicted\")\n",
    "plt.ylabel(\"Actual\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "22e36be2-1f03-48a3-b8fc-5833c79ae7bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# استخدام الميزات التي اختارها RFE\n",
    "X_selected_rfe = X[selected_features_rfe]\n",
    "\n",
    "# تقسيم وتطبيع البيانات\n",
    "X_train_rfe, X_test_rfe, y_train_rfe, y_test_rfe = train_test_split(X_selected_rfe, y, test_size=0.3, random_state=42)\n",
    "\n",
    "scaler = StandardScaler()\n",
    "X_train_rfe = scaler.fit_transform(X_train_rfe)\n",
    "X_test_rfe = scaler.transform(X_test_rfe)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "eb24f075-22db-4b75-977e-c0c1ef473820",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "📊 Classification Report - Random Forest (RFE):\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.89      0.19      0.31        43\n",
      "           1       0.93      1.00      0.96       455\n",
      "\n",
      "    accuracy                           0.93       498\n",
      "   macro avg       0.91      0.59      0.63       498\n",
      "weighted avg       0.93      0.93      0.91       498\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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++mnnxQfH69t27bptdde04IFC1S3bl316tWrwP8InnrqKf32229688039cYbb+jnn39Wx44dlZubW6g4Q0NDdc8992jmzJmutvfee0+lSpVS165dL3huffv21fz587VgwQLdddddGjRokJ577jlXn4ULF6p69epq2LCh6/U7f8prxIgR2r17t6ZOnaqPPvpI5cqVy3essmXLKjU1VWlpaRo+fLgk6cSJE7r33ntVuXJlTZ06tVDn+XccOXJEhw4dUq1atdzaf/75Z7Vr104zZszQsmXLlJSUpPnz56tjx475xsjJyVGnTp2UmJioDz/8UL1799aECRM0btw4V5+TJ0+qVatWWr58uZKTk/Xf//5X0dHRBf4c5s6dqzvuuEOhoaF67733NGPGDB0+fFgtWrTQmjVr8vXv0qWLGjRooA8++EAPP/ywJkyYoCeeeEKdO3dW+/bttXDhQt16660aPny4FixYUKjXxbIsnTlzxm3LS9hPnTqlli1b6u2339bgwYO1ZMkS9ejRQykpKbrrrrvyjbVo0SJNmTJFI0eO1KeffqpmzZpp+/btuummm7R161a9/PLL+vjjj9W+fXs99thjevbZZ13PTUlJ0ejRo3X//fdryZIlmjdvnvr06eNan/HQQw9p0KBBkqQFCxa43o+NGjW64LktX75cOTk5atmyZaFei/T0dEnK9x7Jk5ub6/Y6FfT7WdDreebMGZ3/xeKxsbEqXbq0lixZUqjYUEJY8LiMjAxLknXfffcVqv8PP/xgSbIGDBjg1v71119bkqynnnrK1ZaQkGBJsr7++mu3vnXr1rVuu+02tzZJ1sCBA93aRo0aZRX0Y3/rrbcsSVZ6erplWZb1/vvvW5KszZs3XzR2SdaoUaNcj++77z7L6XRau3fvduvXtm1bKygoyPrzzz8ty7KsVatWWZKsdu3aufWbP3++Jclat27dRY+bF29aWpprrK1bt1qWZVk33XST1atXL8uyLOv666+3EhISLjhObm6ulZOTY/3nP/+xIiIirLNnz7r2Xei5ecdr3rz5BfetWrXKrX3cuHGWJGvhwoVWz549rcDAQOv777+/6Dlejrz3UU5OjnX69Glrx44dVqdOnayQkBBrw4YNF3ze2bNnrZycHGv16tWWJOu7775z7evZs6clyZo/f77bc9q1a2fVrl3b9XjKlCmWJOvDDz906/fwww9bkqy33nrLsqy/XvOYmBirfv36Vm5urqvfsWPHrHLlylnx8fGutrz368svv+w25o033mhJshYsWOBqy8nJsSIjI6277rrrkq9TlSpVLEn5tqefftqyLMuaOnVqgeec93Ncvny5q02SFRYWZh06dMit72233WZVrFjROnLkiFv7o48+agUEBLj6d+jQwbrxxhsvGu+LL77o9vt5Kf3797cCAwPd3s+WZVnp6emWJGvcuHFWTk6OderUKWvz5s1WXFycVb58+Xzj573+528VKlRw61dQn7xtzpw5+eJr2rSp1aRJk0KdC0oGKhtXgLxy4vkLEW+++WbVqVNHn3/+uVt7dHS0br75Zre2G264Qb/99pvHYrrxxhvl7++vRx55RLNnz9avv/5aqOetXLlSiYmJ+So6vXr10okTJ/JVWM6dSpL+Og9JRTqXhIQEXXvttZo5c6a2bNmitLS0C06h5MXYqlUrhYWFycfHR35+fho5cqQOHjyozMzMQh/37rvvLnTfYcOGqX379rr//vs1e/ZsTZw4UfXr17/k8y71KbEgkydPlp+fn/z9/VWrVi198skneu+99xQbG+vW79dff1W3bt0UHR3teh0SEhIkST/88INbX4fDka/icf57btWqVQoJCcn3Mz1/nchPP/2kffv26YEHHlCpUv/vT1Dp0qV19913a/369W5TdZLUoUMHt8d16tSRw+FwW4/k6+urGjVqFPq9c8sttygtLc1tGzBggKS/3iPBwcG655573J6T9zt6/u/krbfeqjJlyrgenzp1Sp9//rnuvPNOBQUFuf0M27Vrp1OnTmn9+vWS/vo9/+677zRgwAB9+umnHllntG/fPkVGRl5wTcTw4cPl5+fnmubcunWrPvroowsuIv/ss8/cXqelS5fm69OlS5d8r2daWpratWuXr2+5cuX0v//972+dI64uLBA1oGzZsgoKCnKVJi/l4MGDkqTy5cvn2xcTE5Pvj2dERES+fk6nUydPnryMaAt27bXX6rPPPlNKSooGDhyorKwsVa9eXY899pgef/zxCz7v4MGDFzyPvP3nOv9c8ta3FOVcHA6H/vnPf+q1117TqVOnVKtWLTVr1qzAvt98843atGmjFi1aaPr06apYsaL8/f21aNEivfDCC0U6bkHnebEYe/XqpSVLlig6OrpQc+m7du3Kt+J/1apVl7yUt0uXLho2bJhycnK0ZcsWjRgxQvfdd5++/fZb1axZU5J0/PhxNWvWTAEBAXr++edVq1YtBQUFac+ePbrrrrvyvQ5BQUEKCAhwa3M6nTp16pTr8cGDBxUVFZUvnujoaLfHl3q/nz17VocPH3a7KiQ8PNytn7+/f4Ex+fv7F/o/67CwsAIXT+bFGB0dne8/63LlysnX1zff+/j8czl48KDOnDmjiRMnauLEiQUeI296dMSIEQoODtY777yjqVOnysfHR82bN9e4ceMuGN+lnDx5Mt9rc67HH39cPXr0UHZ2ttavX69///vfuuOOO/Tdd98V+PelQYMGl1wgGhkZWeh4AwICPPr3Clc+kg0DfHx8lJiYqE8++UR79+695KWheb/c+/fvz9d33759l/wlL4q8P0DZ2dluC1fPXxciSc2aNVOzZs2Um5urDRs2aOLEiUpKSlJUVJTuu+++AsePiIjQ/v3787Xv27dPkjx6Lufq1auXRo4cqalTp+qFF164YL/U1FT5+fnp448/dvtjvGjRoiIfsygr6ffv36+BAwfqxhtv1LZt2zR06FC99tprF31OTEyM0tLS3Npq1659yWOd+0c/Li5OderUUUJCgp544gl9/PHHkv765L5v3z598cUXrmqGpCLfx+FcERER+uabb/K1n79A9Nz3+/n27dvnuveDN0VEROjrr7+WZVluP+fMzEydOXMm3/v4/PdCmTJl5OPjowceeEADBw4s8Bh5iaSvr68GDx6swYMH688//9Rnn32mp556Srfddpv27NlzWZfili1bVt9+++0F91esWNH1HmnatKmio6PVo0cPjRo1yu3+GaYcOnTI2N8CXJmYRjFkxIgRsixLDz/8cIELKnNycvTRRx9J+qsEK8m1wDNPWlqafvjhByUmJnosrrwy6ffff+/WnhdLQXx8fNSkSRPXKvqL/RFLTEx0/Ud2rrfffltBQUHGLgutUKGChg0bpo4dO6pnz54X7OdwOOTr6ysfHx9X28mTJzVnzpx8fT1VLcrNzdX9998vh8OhTz75RMnJyZo4ceIlFzL6+/urcePGbtvl3DekWbNmevDBB7VkyRLXNFbef47nXyk1bdq0Io+fp2XLljp27JgWL17s1j537ly3x7Vr11aFChU0d+5ct2mhrKwsffDBB64rVLwpMTFRx48fz5eEvv322679FxMU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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# تدريب نموذج Random Forest باستخدام أفضل المعاملات السابقة\n",
    "best_rf_rfe = RandomForestClassifier(**grid_search.best_params_, random_state=42)\n",
    "best_rf_rfe.fit(X_train_rfe, y_train_rfe)\n",
    "\n",
    "# التنبؤ\n",
    "y_pred_rfe = best_rf_rfe.predict(X_test_rfe)\n",
    "\n",
    "# التقييم\n",
    "print(\"📊 Classification Report - Random Forest (RFE):\")\n",
    "print(classification_report(y_test_rfe, y_pred_rfe))\n",
    "\n",
    "# مصفوفة الالتباس\n",
    "cm = confusion_matrix(y_test_rfe, y_pred_rfe)\n",
    "sns.heatmap(cm, annot=True, fmt='d', cmap='YlOrBr')\n",
    "plt.title(\"Confusion Matrix - Random Forest (RFE)\")\n",
    "plt.xlabel(\"Predicted\")\n",
    "plt.ylabel(\"Actual\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "e5ade672-e994-4575-b0ed-61c72e015269",
   "metadata": {},
   "outputs": [],
   "source": [
    "# حفظ البيانات بعد التنظيف\n",
    "df.to_csv(\"cleaned_ckd.csv\", index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "544c1db0-96fd-4c86-8233-97a58abac48b",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "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.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
