{
 "nbformat": 4,
 "nbformat_minor": 0,
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3"
  },
  "language_info": {
   "name": "python"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "version_major": 2,
    "version_minor": 0,
    "state": {
     "f72fb1e9eb7a4b84b4447aefcfe67086": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "VBoxModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "VBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "VBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_8c651d22813d47bcb82a24d1a5a5889d",
        "IPY_MODEL_68609152c74a47e390eaddafa8a1654a",
        "IPY_MODEL_bb8be2624cc14b7e8cb7c1055f7c6993",
        "IPY_MODEL_08585645ba5b41f79184c5f26c62588a",
        "IPY_MODEL_2d659724e3954d599ce0e8184eab5a7f",
        "IPY_MODEL_24d39d46510f490fb32b41383435ea49",
        "IPY_MODEL_6689b8218cc74d2cb6bccebf9306c9ed",
        "IPY_MODEL_051ecb192aa548d2a1e34562fbf913cc",
        "IPY_MODEL_b9307af7039a489d8d7f9c5be73d951d",
        "IPY_MODEL_a8d759d7eb00473181566a57eff5db24"
       ],
       "layout": "IPY_MODEL_b547477ddc57424a9e407dd019ab0b74"
      }
     },
     "8c651d22813d47bcb82a24d1a5a5889d": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "HTMLModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_d4704d32dfee46ffb587c885a3da7b50",
       "placeholder": "​",
       "style": "IPY_MODEL_c5d93acf6bc54234971cae1a654362c6",
       "value": "<h3>🎯 İlaç Etkinliği — Problem & Encoding Seçim Aracı</h3>"
      }
     },
     "68609152c74a47e390eaddafa8a1654a": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "HTMLModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_780a24e2fdff444abab2b8b2115463ea",
       "placeholder": "​",
       "style": "IPY_MODEL_035f85af58fc454996cbd98bd0857fb9",
       "value": "<p style='color:#555;'>Burada <b>n_features</b> = her hasta için kullanılacak sayısal özellik sayısı (tahlil + radiomics + demografik), <b>n_samples</b> = hasta / kayıt sayısıdır. Ham MR boyutu (MB) burada seçilmez; özellik çıkarımı sonrası boyut kullanılır.</p>"
      }
     },
     "bb8be2624cc14b7e8cb7c1055f7c6993": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DropdownModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DropdownModel",
       "_options_labels": [
        "Sınıflandırma — İlaç etkili / etkisiz",
        "Regresyon — Etkinlik skoru (0-1 veya %)",
        "Optimizasyon — Doz / kombinasyon arama"
       ],
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "DropdownView",
       "description": "Problem:",
       "description_tooltip": null,
       "disabled": false,
       "index": 0,
       "layout": "IPY_MODEL_79f6f1bccfc249aa99cf9d540ba9871e",
       "style": "IPY_MODEL_64864cc7429949ae808d98871b1868cc"
      }
     },
     "08585645ba5b41f79184c5f26c62588a": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "IntSliderModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "IntSliderModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "IntSliderView",
       "continuous_update": false,
       "description": "Özellik (n_features):",
       "description_tooltip": null,
       "disabled": false,
       "layout": "IPY_MODEL_9f5cf8207980407bab21b3c0df0b676a",
       "max": 50,
       "min": 2,
       "orientation": "horizontal",
       "readout": true,
       "readout_format": "d",
       "step": 1,
       "style": "IPY_MODEL_f815a7d3c4634764993f1c90e8f5d0e1",
       "value": 25
      }
     },
     "2d659724e3954d599ce0e8184eab5a7f": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "IntSliderModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "IntSliderModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "IntSliderView",
       "continuous_update": false,
       "description": "Hasta sayısı (n):",
       "description_tooltip": null,
       "disabled": false,
       "layout": "IPY_MODEL_bbc31e29b74849ed98ca833b3ec00b42",
       "max": 5000,
       "min": 50,
       "orientation": "horizontal",
       "readout": true,
       "readout_format": "d",
       "step": 50,
       "style": "IPY_MODEL_7edb9bcecc3546f8ab33b9dedae14e30",
       "value": 300
      }
     },
     "24d39d46510f490fb32b41383435ea49": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DropdownModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DropdownModel",
       "_options_labels": [
        "Sürekli (tahlil + radiomics özellikler)",
        "Kategorik (cinsiyet, komorbidite, ilaç grubu)",
        "Karışık (demografik + tahlil + görüntü özellikleri)"
       ],
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "DropdownView",
       "description": "Veri Tipi:",
       "description_tooltip": null,
       "disabled": false,
       "index": 2,
       "layout": "IPY_MODEL_6594d7b05ea24ce684ad729e923c9cdb",
       "style": "IPY_MODEL_5b8e98f07f204219aa72b3f75eb1989e"
      }
     },
     "6689b8218cc74d2cb6bccebf9306c9ed": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DropdownModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DropdownModel",
       "_options_labels": [
        "Hızlı prototip / Eğitim (Simülatör)",
        "Gerçek IBM Quantum denemesi",
        "Yüksek doğruluk (simülatör + error mitigation)"
       ],
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "DropdownView",
       "description": "Öncelik:",
       "description_tooltip": null,
       "disabled": false,
       "index": 0,
       "layout": "IPY_MODEL_d21b58db95a44eb19a0ee0b0eb8c933e",
       "style": "IPY_MODEL_d38e70999bdf471792d685f591bcaf13"
      }
     },
     "051ecb192aa548d2a1e34562fbf913cc": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "HTMLModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_c04d7f5893624f2c8cdf13dcfed6a77c",
       "placeholder": "​",
       "style": "IPY_MODEL_c7be348689e84c11a51310dc7bd84e9c",
       "value": "<br>"
      }
     },
     "b9307af7039a489d8d7f9c5be73d951d": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "ButtonModel",
      "model_module_version": "1.5.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ButtonModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ButtonView",
       "button_style": "success",
       "description": "Encoding + Qubit + Algoritma & Cihaz Öner",
       "disabled": false,
       "icon": "check",
       "layout": "IPY_MODEL_9b5a6cd95a4d4d29bd36c397e64468f2",
       "style": "IPY_MODEL_ca53246aa4744a44acf191dfdcee0c3e",
       "tooltip": ""
      }
     },
     "a8d759d7eb00473181566a57eff5db24": {
      "model_module": "@jupyter-widgets/output",
      "model_name": "OutputModel",
      "model_module_version": "1.0.0",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_846d0e585f354e2cafcbf0c010c7d79e",
       "msg_id": "",
       "outputs": [
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<h3 style='color:#1a73e8;'>🔍 Öneri Sonuçları — İlaç Etkinliği Senaryosu</h3>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "Problem          : Sınıflandırma — İlaç etkili / etkisiz\n",
          "Özellik sayısı   : 25  (n_features)\n",
          "Hasta / kayıt    : 300  (n_samples)\n",
          "Veri tipi        : Karışık (demografik + tahlil + görüntü özellikleri)\n",
          "Öncelik          : Hızlı prototip / Eğitim (Simülatör)\n",
          "======================================================================\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<div style='background:#e8f0fe;padding:12px 16px;border-radius:8px;margin:10px 0;'><h4 style='margin:0 0 6px 0;color:#174ea6;'>📐 Encoding Yöntemi & Qubit Hesabı</h4></div>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "▶ Birincil öneri : Hibrit: Kategorik→One-Hot + Sürekli→Angle/ZZFeatureMap (+ PCA)\n",
          "   Gerekli kübit : 25\n",
          "   Açıklama      : Demografik (kategorik) + tahlil/radiomics (sürekli) birlikte kullanılır. Kategorikler One-Hot ile sayısallaştırılır, tüm vektör Angle/ZZ ile kodlanır. Toplam boyut yüksekse PCA uygulanır.\n",
          "   Qiskit ipucu  : One-Hot + StandardScaler + (PCA) + zz_feature_map\n",
          "\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<b>🔄 Alternatif encoding’ler:</b>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "   1. Ayrı feature map’ler + birleştirme  |  kübit ≈ değişken\n",
          "      → Kategorik ve sürekli özellikler farklı map’lerle kodlanıp devre birleştirilebilir (ileri seviye).\n",
          "\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<b>📊 Qubit karşılaştırma (mevcut n_features ile):</b>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "   • Angle / ZZFeatureMap     →  25 kübit\n",
          "   • Amplitude Encoding       →  5 kübit\n",
          "   • Basis (kaba)             →  ~75-200 kübit\n",
          "   • PCA sonrası (6 özellik) →  6 kübit\n",
          "\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<div style='background:#fff3cd;padding:10px 14px;border-radius:6px;'><b>⚠️ PCA önerilir:</b> n_features=25. Aşama 3’te <b>6</b> boyuta indirin.</div>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<b>⚠️ Encoding uyarıları:</b>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "   • Karışık klinik veri + orta/yüksek özellik → PCA ile 4–6 boyuta indirmeyi öneririz.\n",
          "\n",
          "======================================================================\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<b>🧠 Önerilen algoritmalar:</b>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "   1. FidelityQuantumKernel + QSVM\n",
          "      → İlaç etkili/etkisiz ikili sınıflandırma için uygun. Bu notebook’un ana yöntemi.\n",
          "   2. Variational Quantum Classifier (VQC)\n",
          "      → RealAmplitudes ansatz ile eğitilebilir sınıflandırıcı.\n",
          "   3. SamplerQNN / EstimatorQNN\n",
          "      → Daha esnek kuantum sinir ağı mimarileri.\n",
          "\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<b>💻 Önerilen cihazlar:</b>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "   1. AerSimulator / StatevectorSampler\n",
          "      → Geliştirme ve eğitim için varsayılan.\n",
          "   2. Qiskit Runtime Simulator\n",
          "      → Bulut simülasyonu, gerçek API deneyimi.\n",
          "\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<b>📝 Notlar (KVKK + NISQ):</b>"
         },
         "metadata": {}
        },
        {
         "output_type": "stream",
         "name": "stdout",
         "text": [
          "   • Yüksek boyut/kayıt → PCA + mümkünse alt-örnekleme.\n",
          "   • Önce simülatörde doğrulayın, sonra gerçek donanıma geçin.\n",
          "   • Kategorik alanlar → One-Hot Encoding zorunlu (KVKK sonrası).\n",
          "   • Kişisel tanımlayıcılar (TC, ad, protokol) kuantum devresine ASLA gönderilmez; sadece anonim özellik vektörü kullanılır.\n",
          "\n",
          "======================================================================\n"
         ]
        },
        {
         "output_type": "display_data",
         "data": {
          "text/plain": "<IPython.core.display.HTML object>",
          "text/html": "<b>➡️ Sonraki adım:</b> Aşama 2 (kütüphane kurulumu) → Aşama 4’te sentetik hasta verisi üretebilir veya kendi CSV’nizi yükleyebilirsiniz."
         },
         "metadata": {}
        }
       ]
      }
     },
     "b547477ddc57424a9e407dd019ab0b74": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "d4704d32dfee46ffb587c885a3da7b50": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c5d93acf6bc54234971cae1a654362c6": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DescriptionStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "780a24e2fdff444abab2b8b2115463ea": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "035f85af58fc454996cbd98bd0857fb9": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DescriptionStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "79f6f1bccfc249aa99cf9d540ba9871e": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "520px"
      }
     },
     "64864cc7429949ae808d98871b1868cc": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DescriptionStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": "140px"
      }
     },
     "9f5cf8207980407bab21b3c0df0b676a": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "f815a7d3c4634764993f1c90e8f5d0e1": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "SliderStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "SliderStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": "140px",
       "handle_color": null
      }
     },
     "bbc31e29b74849ed98ca833b3ec00b42": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "7edb9bcecc3546f8ab33b9dedae14e30": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "SliderStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "SliderStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": "140px",
       "handle_color": null
      }
     },
     "6594d7b05ea24ce684ad729e923c9cdb": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "520px"
      }
     },
     "5b8e98f07f204219aa72b3f75eb1989e": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DescriptionStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": "140px"
      }
     },
     "d21b58db95a44eb19a0ee0b0eb8c933e": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "520px"
      }
     },
     "d38e70999bdf471792d685f591bcaf13": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DescriptionStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": "140px"
      }
     },
     "c04d7f5893624f2c8cdf13dcfed6a77c": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c7be348689e84c11a51310dc7bd84e9c": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "DescriptionStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "9b5a6cd95a4d4d29bd36c397e64468f2": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": "40px",
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "400px"
      }
     },
     "ca53246aa4744a44acf191dfdcee0c3e": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "ButtonStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ButtonStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "button_color": null,
       "font_weight": ""
      }
     },
     "846d0e585f354e2cafcbf0c010c7d79e": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "df24bbfdf74a4b9f986d3163434c215b": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "FileUploadModel",
      "model_module_version": "1.5.0",
      "state": {
       "_counter": 0,
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FileUploadModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "FileUploadView",
       "accept": ".csv",
       "button_style": "",
       "data": [],
       "description": "CSV Yükle",
       "description_tooltip": null,
       "disabled": false,
       "error": "",
       "icon": "upload",
       "layout": "IPY_MODEL_23cf0be20f784011898658183b452e44",
       "metadata": [],
       "multiple": false,
       "style": "IPY_MODEL_a02ce824de774942a3a462c2b9b768d5"
      }
     },
     "23cf0be20f784011898658183b452e44": {
      "model_module": "@jupyter-widgets/base",
      "model_name": "LayoutModel",
      "model_module_version": "1.2.0",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "a02ce824de774942a3a462c2b9b768d5": {
      "model_module": "@jupyter-widgets/controls",
      "model_name": "ButtonStyleModel",
      "model_module_version": "1.5.0",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ButtonStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "button_color": null,
       "font_weight": ""
      }
     }
    }
   }
  }
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "TT_mTQSL4I8m"
   },
   "source": "# Applied QML: Hastane Senaryosu — İlaç Etkinliği Tahmini\n## Kuantum Makine Öğrenmesi Uygulama Rehberi\n\n**Eğitmen:** Joseph Volkan Özcan\n\nBu notebook, bir hastanede hasta verilerinin (kişisel bilgiler, tahlil sonuçları, MR/görüntüleme özellik vektörleri)  \nkuantum bilgisayara güvenli şekilde gönderilerek **ilaç etkinliği tahmini** yapılmasını uçtan uca gösterir.\n\n### Senaryo Özeti\n1. Hasta verileri toplanır (demografik + laboratuvar + görüntüleme özellikleri)\n2. **Anonimleştirme** (KVKK / GDPR uyumlu) uygulanır\n3. Yüksek boyutlu veriler **boyut indirgeme (PCA)** ile küçültülür\n4. Veri kuantum devresine **encoding** ile aktarılır\n5. Kuantum sınıflandırıcı / kernel ile **ilaç etkinliği** (etkili / etkisiz veya etkinlik skoru) tahmin edilir\n6. Sonuçlar ölçülür, yorumlanır ve (yetkili erişimde) de-anonimleştirilebilir\n\n> Sadece **Python + IBM Qiskit** kullanılarak tasarlanmıştır. Colab’da çalışacak şekilde hazırlanmıştır.\n"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "yKm71S8e4I80"
   },
   "source": "## AŞAMA 1: Proje Tanımı, Veri Büyüklüğü ve Seçim Aracı\n\n### 1.1 Problemin Tanımı\nBu projede çözülmek istenen problem:\n\n> **İlaç Etkinliği Tahmini (Drug Efficacy Prediction)**  \n> Belirli bir hasta profili (yaş, cinsiyet, tahlil değerleri, MR’dan türetilmiş özellikler vb.) verildiğinde,  \n> seçilen ilacın **etkili olup olmayacağını** (sınıflandırma) veya **etkinlik skorunu** (regresyon) tahmin etmek.\n\nBu bir **Sınıflandırma** (veya isteğe bağlı Regresyon) problemidir. Optimizasyon (ör. doz ayarlama) ikinci aşamada düşünülebilir.\n\n### 1.2 “Veri Büyüklüğü” Ne Anlama Gelir?\n\nKuantum makine öğrenmesinde “veri büyüklüğü” iki ayrı boyutta ele alınır. Bunları karıştırmamak kritiktir:\n\n| Kavram | Anlamı (Hastane Senaryosunda) | Kuantum Etkisi |\n|--------|-------------------------------|----------------|\n| **n_samples (kayıt / hasta sayısı)** | Kaç adet hasta kaydı var? (ör. 200, 1000, 5000) | Kernel yöntemlerinde (QSVM) maliyet ≈ O(n²). Çok büyük n → simülatörde yavaşlar, gerçek cihazda pahalılaşır. |\n| **n_features (özellik / nitelik sayısı)** | Her hasta için kaç sayısal özellik kullanılıyor? | **Doğrudan kübit sayısını belirler.** Angle Encoding’de 1 özellik ≈ 1 kübit. |\n| **Ham veri boyutu** | MR görüntüsü (MB/GB), ham tahlil tabloları | Kuantuma **gönderilmez**. Önce klasik ön-işleme + özellik çıkarımı yapılır. |\n\n#### Hastane verisinde tipik özellik kaynakları\n- **Demografik / kişisel:** yaş, cinsiyet, BMI, komorbidite sayısı → düşük boyut\n- **Laboratuvar tahlilleri:** hemogram, biyokimya, tümör belirteçleri → 10–50 özellik\n- **Görüntüleme (MR / BT / PET):** ham piksel verisi **doğrudan kullanılmaz**.  \n  Klasik bir CNN veya radiomics ile özellik vektörü çıkarılır (ör. 100–512 boyut).  \n  Bu vektör daha sonra PCA ile 4–8 boyuta indirilir.\n\n> **Özet kural (NISQ dönemi):**  \n> - n_features > 8–10 ise **mutlaka PCA** uygulayın.  \n> - n_samples çok büyükse (binlerce) önce alt-örnekleme veya mini-batch düşünün.  \n> - Ham görüntü / kişisel kimlik bilgisi **asla** kuantum devresine ham haliyle gitmez.\n\n### 1.3 Anonimleştirme (KVKK / GDPR)\nKuantuma gönderilmeden önce:\n- Doğrudan tanımlayıcılar (TC, ad-soyad, protokol no) kaldırılır veya hash’lenir\n- Kvası-tanımlayıcılar (nadir hastalık + yaş + posta kodu kombinasyonu) genelleştirilir\n- Sadece model için gerekli sayısal özellikler ve anonim hasta ID’si tutulur\n\nSonuçlar yalnızca yetkili hekim / sistem tarafından de-anonimleştirilebilir (Aşama 10).\n\nAşağıdaki **interaktif seçim aracı** ile problem tipinizi, özellik sayısını, hasta (kayıt) sayısını ve veri tipini seçerek  \nuygun **encoding**, **kübit ihtiyacı**, **algoritma** ve **cihaz** önerisini alabilirsiniz.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama1_secim",
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000,
     "referenced_widgets": [
      "f72fb1e9eb7a4b84b4447aefcfe67086",
      "8c651d22813d47bcb82a24d1a5a5889d",
      "68609152c74a47e390eaddafa8a1654a",
      "bb8be2624cc14b7e8cb7c1055f7c6993",
      "08585645ba5b41f79184c5f26c62588a",
      "2d659724e3954d599ce0e8184eab5a7f",
      "24d39d46510f490fb32b41383435ea49",
      "6689b8218cc74d2cb6bccebf9306c9ed",
      "051ecb192aa548d2a1e34562fbf913cc",
      "b9307af7039a489d8d7f9c5be73d951d",
      "a8d759d7eb00473181566a57eff5db24",
      "b547477ddc57424a9e407dd019ab0b74",
      "d4704d32dfee46ffb587c885a3da7b50",
      "c5d93acf6bc54234971cae1a654362c6",
      "780a24e2fdff444abab2b8b2115463ea",
      "035f85af58fc454996cbd98bd0857fb9",
      "79f6f1bccfc249aa99cf9d540ba9871e",
      "64864cc7429949ae808d98871b1868cc",
      "9f5cf8207980407bab21b3c0df0b676a",
      "f815a7d3c4634764993f1c90e8f5d0e1",
      "bbc31e29b74849ed98ca833b3ec00b42",
      "7edb9bcecc3546f8ab33b9dedae14e30",
      "6594d7b05ea24ce684ad729e923c9cdb",
      "5b8e98f07f204219aa72b3f75eb1989e",
      "d21b58db95a44eb19a0ee0b0eb8c933e",
      "d38e70999bdf471792d685f591bcaf13",
      "c04d7f5893624f2c8cdf13dcfed6a77c",
      "c7be348689e84c11a51310dc7bd84e9c",
      "9b5a6cd95a4d4d29bd36c397e64468f2",
      "ca53246aa4744a44acf191dfdcee0c3e",
      "846d0e585f354e2cafcbf0c010c7d79e"
     ]
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469533348,
     "user_tz": -180,
     "elapsed": 263,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "e58c320d-1a99-4e07-9ef1-bf59626591c5"
   },
   "source": "# ============================================================\n# AŞAMA 1 - İnteraktif Seçim Aracı\n# (Encoding + Qubit Hesabı + Algoritma + Cihaz)\n# Hastane / İlaç Etkinliği senaryosuna uyarlanmıştır\n# ============================================================\n\nimport ipywidgets as widgets\nfrom IPython.display import display, clear_output, HTML\nimport math\n\nproblem_type = widgets.Dropdown(\n    options=[\n        (\"Sınıflandırma — İlaç etkili / etkisiz\", \"classification\"),\n        (\"Regresyon — Etkinlik skoru (0-1 veya %)\", \"regression\"),\n        (\"Optimizasyon — Doz / kombinasyon arama\", \"optimization\")\n    ],\n    value=\"classification\",\n    description=\"Problem:\",\n    style={\"description_width\": \"140px\"},\n    layout=widgets.Layout(width=\"520px\")\n)\n\nn_features = widgets.IntSlider(\n    value=12,\n    min=2, max=50, step=1,\n    description=\"Özellik (n_features):\",\n    style={\"description_width\": \"140px\"},\n    continuous_update=False\n)\n\nn_samples = widgets.IntSlider(\n    value=300,\n    min=50, max=5000, step=50,\n    description=\"Hasta sayısı (n):\",\n    style={\"description_width\": \"140px\"},\n    continuous_update=False\n)\n\ndata_type = widgets.Dropdown(\n    options=[\n        (\"Sürekli (tahlil + radiomics özellikler)\", \"continuous\"),\n        (\"Kategorik (cinsiyet, komorbidite, ilaç grubu)\", \"categorical\"),\n        (\"Karışık (demografik + tahlil + görüntü özellikleri)\", \"mixed\")\n    ],\n    value=\"mixed\",\n    description=\"Veri Tipi:\",\n    style={\"description_width\": \"140px\"},\n    layout=widgets.Layout(width=\"520px\")\n)\n\npriority = widgets.Dropdown(\n    options=[\n        (\"Hızlı prototip / Eğitim (Simülatör)\", \"prototype\"),\n        (\"Gerçek IBM Quantum denemesi\", \"hardware\"),\n        (\"Yüksek doğruluk (simülatör + error mitigation)\", \"accuracy\")\n    ],\n    value=\"prototype\",\n    description=\"Öncelik:\",\n    style={\"description_width\": \"140px\"},\n    layout=widgets.Layout(width=\"520px\")\n)\n\nrun_button = widgets.Button(\n    description=\"Encoding + Qubit + Algoritma & Cihaz Öner\",\n    button_style=\"success\",\n    icon=\"check\",\n    layout=widgets.Layout(width=\"400px\", height=\"40px\")\n)\noutput_area = widgets.Output()\n\ndef compute_encoding_and_qubits(features, samples, dtype):\n    results = {\n        \"primary\": None,\n        \"alternatives\": [],\n        \"pca_recommended\": features > 8,\n        \"pca_target\": min(6, max(2, features // 2)) if features > 8 else features,\n        \"warnings\": []\n    }\n    angle_qubits = features\n    amp_qubits = math.ceil(math.log2(max(features, 2)))\n    amp_padded = 2 ** amp_qubits\n\n    if dtype == \"continuous\":\n        if features <= 8:\n            results[\"primary\"] = (\n                \"Angle Encoding + ZZFeatureMap\",\n                angle_qubits,\n                \"Tahlil ve radiomics sürekli değerleri dönme açılarına yazılır. \"\n                \"ZZFeatureMap ile özellik etkileşimi (entanglement) eklenir. NISQ için en stabil seçenek.\",\n                \"zz_feature_map(feature_dimension=n, reps=2, entanglement='linear')\"\n            )\n            results[\"alternatives\"].append((\n                \"PauliFeatureMap\", angle_qubits,\n                \"Farklı Pauli operatörleri ile daha zengin kernel üretilebilir.\"\n            ))\n            results[\"alternatives\"].append((\n                \"Amplitude Encoding\", amp_qubits,\n                f\"Sadece ~{amp_qubits} kübit (2^{amp_qubits}={amp_padded} boyuta pad). \"\n                \"State preparation maliyeti yüksek; büyük özellik setlerinde düşünülebilir.\"\n            ))\n        else:\n            results[\"primary\"] = (\n                \"PCA → Angle Encoding + ZZFeatureMap\",\n                results[\"pca_target\"],\n                f\"Özellik sayısı ({features}) yüksek (ör. radiomics + geniş tahlil paneli). \"\n                f\"Önce PCA ile {results['pca_target']} boyuta indirin, sonra Angle/ZZFeatureMap uygulayın.\",\n                \"PCA(n_components=k) + zz_feature_map(feature_dimension=k, reps=2)\"\n            )\n            results[\"alternatives\"].append((\n                \"Amplitude Encoding (PCA sonrası veya doğrudan)\", amp_qubits,\n                f\"Doğrudan {amp_qubits} kübit. Hazırlama devresi derin olur, NISQ’te riskli.\"\n            ))\n            results[\"warnings\"].append(f\"Özellik sayısı {features} > 8 → PCA zorunlu kabul edin.\")\n    elif dtype == \"categorical\":\n        results[\"primary\"] = (\n            \"One-Hot (klasik) → Angle Encoding / Basis Encoding\",\n            angle_qubits,\n            \"Cinsiyet, komorbidite kodları, ilaç grubu gibi kategoriler doğrudan kübite yazılamaz. \"\n            \"Önce One-Hot Encoding uygulayın, çıkan 0/1 vektörünü Angle Encoding ile kodlayın.\",\n            \"pd.get_dummies(...) veya OneHotEncoder → zz_feature_map\"\n        )\n        results[\"alternatives\"].append((\n            \"Basis Encoding (düşük kardinalite)\",\n            \"log2(kategori sayısı)\",\n            \"Her kategorik değişken az sayıda değer alıyorsa Basis Encoding daha az kübit kullanabilir.\"\n        ))\n        results[\"warnings\"].append(\n            \"One-Hot, özellik (ve kübit) sayısını artırabilir. Yüksek kardinaliteli sütunlarda dikkat.\"\n        )\n    else:  # mixed — hastane için en gerçekçi\n        results[\"primary\"] = (\n            \"Hibrit: Kategorik→One-Hot + Sürekli→Angle/ZZFeatureMap (+ PCA)\",\n            angle_qubits,\n            \"Demografik (kategorik) + tahlil/radiomics (sürekli) birlikte kullanılır. \"\n            \"Kategorikler One-Hot ile sayısallaştırılır, tüm vektör Angle/ZZ ile kodlanır. \"\n            \"Toplam boyut yüksekse PCA uygulanır.\",\n            \"One-Hot + StandardScaler + (PCA) + zz_feature_map\"\n        )\n        results[\"alternatives\"].append((\n            \"Ayrı feature map’ler + birleştirme\",\n            \"değişken\",\n            \"Kategorik ve sürekli özellikler farklı map’lerle kodlanıp devre birleştirilebilir (ileri seviye).\"\n        ))\n        if features > 6:\n            results[\"pca_recommended\"] = True\n            results[\"warnings\"].append(\n                \"Karışık klinik veri + orta/yüksek özellik → PCA ile 4–6 boyuta indirmeyi öneririz.\"\n            )\n\n    if samples > 1000:\n        results[\"warnings\"].append(\n            f\"Hasta sayısı ({samples}) büyük. QSVM’de maliyet O(n²). Alt-örnekleme veya mini-batch düşünün.\"\n        )\n    if samples < 80:\n        results[\"warnings\"].append(\n            \"Hasta sayısı çok küçük. Overfitting riski yüksek; cross-validation kullanın.\"\n        )\n    return results\n\ndef get_recommendations(prob, features, samples, dtype, prio):\n    recs = {\n        \"algorithms\": [],\n        \"devices\": [],\n        \"notes\": [],\n        \"encoding_info\": compute_encoding_and_qubits(features, samples, dtype),\n        \"pca_required\": features > 8\n    }\n    enc = recs[\"encoding_info\"]\n\n    if prob == \"classification\":\n        recs[\"algorithms\"] = [\n            (\"FidelityQuantumKernel + QSVM\",\n             \"İlaç etkili/etkisiz ikili sınıflandırma için uygun. Bu notebook’un ana yöntemi.\"),\n            (\"Variational Quantum Classifier (VQC)\",\n             \"RealAmplitudes ansatz ile eğitilebilir sınıflandırıcı.\"),\n            (\"SamplerQNN / EstimatorQNN\",\n             \"Daha esnek kuantum sinir ağı mimarileri.\")\n        ]\n        if features <= 6 and samples <= 500:\n            recs[\"algorithms\"].insert(0, (\n                \"QSVM (Quantum Support Vector Machine)\",\n                \"Küçük özellik setlerinde en yorumlanabilir seçenek.\"\n            ))\n    elif prob == \"regression\":\n        recs[\"algorithms\"] = [\n            (\"Variational Quantum Regressor\", \"Etkinlik skoru (sürekli) tahmini için.\"),\n            (\"Quantum Kernel Ridge Regression\", \"Kernel tabanlı regresyon.\"),\n            (\"EstimatorQNN tabanlı regresyon\", \"Beklenti değeri üzerinden sürekli çıktı.\")\n        ]\n    else:\n        recs[\"algorithms\"] = [\n            (\"QAOA\", \"Doz / ilaç kombinasyonu arama (kombinatoryal).\"),\n            (\"VQE\", \"Enerji / maliyet minimizasyonu gerektiren formülasyonlar.\"),\n            (\"Grover tabanlı arama\", \"Yapılandırılmış arama (ileri seviye).\")\n        ]\n\n    effective_q = enc[\"primary\"][1]\n    if isinstance(effective_q, str):\n        effective_q = features\n\n    if features > 12 or samples > 2000:\n        recs[\"notes\"].append(\"Yüksek boyut/kayıt → PCA + mümkünse alt-örnekleme.\")\n        recs[\"pca_required\"] = True\n\n    if prio == \"prototype\":\n        recs[\"devices\"] = [\n            (\"AerSimulator / StatevectorSampler\", \"Geliştirme ve eğitim için varsayılan.\"),\n            (\"Qiskit Runtime Simulator\", \"Bulut simülasyonu, gerçek API deneyimi.\")\n        ]\n        recs[\"notes\"].append(\"Önce simülatörde doğrulayın, sonra gerçek donanıma geçin.\")\n    elif prio == \"hardware\":\n        if effective_q <= 5:\n            recs[\"devices\"] = [\n                (\"IBM Quantum küçük backend’ler\", \"≤5 kübit gerçek cihaz.\"),\n                (\"AerSimulator (ön test)\", \"Gerçek cihaza göndermeden önce test edin.\")\n            ]\n        elif effective_q <= 10:\n            recs[\"devices\"] = [\n                (\"IBM Quantum 127+ kübit + error mitigation\", \"PCA sonrası 6–10 kübit denenebilir.\"),\n                (\"Qiskit Runtime SamplerV2 / EstimatorV2\", \"Modern primitives.\")\n            ]\n            recs[\"notes\"].append(\"Devre derinliğini düşük tutun (reps=1–2), ResilienceLevel kullanın.\")\n        else:\n            recs[\"devices\"] = [\n                (\"PCA → 4–6 özellik, sonra gerçek donanım\", \"12+ kübit doğrudan pratik değil.\"),\n                (\"AerSimulator + noise model\", \"Gürültüyü taklit ederek geliştirin.\")\n            ]\n            recs[\"notes\"].append(\"Yüksek kübit → simülatör + PCA zorunlu.\")\n    else:\n        recs[\"devices\"] = [\n            (\"StatevectorSampler (exact)\", \"Gürültüsüz referans sonuçlar.\"),\n            (\"AerSimulator + yüksek shot (8192+)\", \"İstatistiksel kararlılık.\"),\n            (\"Gerçek donanım + ZNE / PEC\", \"Son aşama doğruluk artışı.\")\n        ]\n        recs[\"notes\"].append(\"Yüksek doğruluk için shot sayısını artırın ve hata azaltma uygulayın.\")\n\n    if samples < 100:\n        recs[\"notes\"].append(\"Küçük kohort → overfitting riski; cross-validation şart.\")\n    if dtype in (\"categorical\", \"mixed\"):\n        recs[\"notes\"].append(\"Kategorik alanlar → One-Hot Encoding zorunlu (KVKK sonrası).\")\n\n    recs[\"notes\"].append(\n        \"Kişisel tanımlayıcılar (TC, ad, protokol) kuantum devresine ASLA gönderilmez; \"\n        \"sadece anonim özellik vektörü kullanılır.\"\n    )\n    return recs\n\ndef on_button_clicked(b):\n    with output_area:\n        clear_output()\n        recs = get_recommendations(\n            problem_type.value, n_features.value, n_samples.value,\n            data_type.value, priority.value\n        )\n        enc = recs[\"encoding_info\"]\n\n        display(HTML(\"<h3 style='color:#1a73e8;'>🔍 Öneri Sonuçları — İlaç Etkinliği Senaryosu</h3>\"))\n        print(f\"Problem          : {problem_type.label}\")\n        print(f\"Özellik sayısı   : {n_features.value}  (n_features)\")\n        print(f\"Hasta / kayıt    : {n_samples.value}  (n_samples)\")\n        print(f\"Veri tipi        : {data_type.label}\")\n        print(f\"Öncelik          : {priority.label}\")\n        print(\"=\" * 70)\n\n        display(HTML(\n            \"<div style='background:#e8f0fe;padding:12px 16px;border-radius:8px;margin:10px 0;'>\"\n            \"<h4 style='margin:0 0 6px 0;color:#174ea6;'>📐 Encoding Yöntemi & Qubit Hesabı</h4>\"\n            \"</div>\"\n        ))\n        name, qubits, desc, qiskit_hint = enc[\"primary\"]\n        print(f\"▶ Birincil öneri : {name}\")\n        print(f\"   Gerekli kübit : {qubits}\")\n        print(f\"   Açıklama      : {desc}\")\n        print(f\"   Qiskit ipucu  : {qiskit_hint}\")\n        print()\n\n        if enc[\"alternatives\"]:\n            display(HTML(\"<b>🔄 Alternatif encoding’ler:</b>\"))\n            for i, (a_name, a_q, a_desc) in enumerate(enc[\"alternatives\"], 1):\n                print(f\"   {i}. {a_name}  |  kübit ≈ {a_q}\")\n                print(f\"      → {a_desc}\")\n            print()\n\n        display(HTML(\"<b>📊 Qubit karşılaştırma (mevcut n_features ile):</b>\"))\n        f = n_features.value\n        print(f\"   • Angle / ZZFeatureMap     →  {f} kübit\")\n        print(f\"   • Amplitude Encoding       →  {math.ceil(math.log2(max(f,2)))} kübit\")\n        print(f\"   • Basis (kaba)             →  ~{f*3}-{f*8} kübit\")\n        if enc[\"pca_recommended\"]:\n            print(f\"   • PCA sonrası ({enc['pca_target']} özellik) →  {enc['pca_target']} kübit\")\n        print()\n\n        if enc[\"pca_recommended\"] or recs[\"pca_required\"]:\n            display(HTML(\n                f\"<div style='background:#fff3cd;padding:10px 14px;border-radius:6px;'>\"\n                f\"<b>⚠️ PCA önerilir:</b> n_features={n_features.value}. \"\n                f\"Aşama 3’te <b>{enc['pca_target']}</b> boyuta indirin.\"\n                f\"</div>\"\n            ))\n            print()\n\n        if enc[\"warnings\"]:\n            display(HTML(\"<b>⚠️ Encoding uyarıları:</b>\"))\n            for w in enc[\"warnings\"]:\n                print(f\"   • {w}\")\n            print()\n\n        print(\"=\" * 70)\n        display(HTML(\"<b>🧠 Önerilen algoritmalar:</b>\"))\n        for i, (n, d) in enumerate(recs[\"algorithms\"], 1):\n            print(f\"   {i}. {n}\\n      → {d}\")\n        print()\n        display(HTML(\"<b>💻 Önerilen cihazlar:</b>\"))\n        for i, (n, d) in enumerate(recs[\"devices\"], 1):\n            print(f\"   {i}. {n}\\n      → {d}\")\n        print()\n        if recs[\"notes\"]:\n            display(HTML(\"<b>📝 Notlar (KVKK + NISQ):</b>\"))\n            for note in recs[\"notes\"]:\n                print(f\"   • {note}\")\n\n        print(\"\\n\" + \"=\" * 70)\n        display(HTML(\n            \"<b>➡️ Sonraki adım:</b> Aşama 2 (kütüphane kurulumu) → \"\n            \"Aşama 4’te sentetik hasta verisi üretebilir veya kendi CSV’nizi yükleyebilirsiniz.\"\n        ))\n\nrun_button.on_click(on_button_clicked)\n\nui = widgets.VBox([\n    widgets.HTML(\"<h3>🎯 İlaç Etkinliği — Problem & Encoding Seçim Aracı</h3>\"),\n    widgets.HTML(\n        \"<p style='color:#555;'>Burada <b>n_features</b> = her hasta için kullanılacak sayısal özellik sayısı \"\n        \"(tahlil + radiomics + demografik), <b>n_samples</b> = hasta / kayıt sayısıdır. \"\n        \"Ham MR boyutu (MB) burada seçilmez; özellik çıkarımı sonrası boyut kullanılır.</p>\"\n    ),\n    problem_type, n_features, n_samples, data_type, priority,\n    widgets.HTML(\"<br>\"), run_button, output_area\n])\ndisplay(ui)\n",
   "execution_count": 1,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "VBox(children=(HTML(value='<h3>🎯 İlaç Etkinliği — Problem & Encoding Seçim Aracı</h3>'), HTML(value=\"<p style=…"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "f72fb1e9eb7a4b84b4447aefcfe67086"
      }
     },
     "metadata": {}
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "c_tep_hS4I87"
   },
   "source": "## AŞAMA 2: Kütüphane Kurulumları ve Çevresel Ayarlar\n\nKuantum ve veri işleme için gerekli paketler kurulur.  \nGerçek IBM Quantum erişimi için API anahtarı `.env` veya Colab Secrets üzerinden verilebilir.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama2_kurulum",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469902025,
     "user_tz": -180,
     "elapsed": 22405,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "a828e465-7ddf-409f-a001-d6bf7a68bd50"
   },
   "source": "import os\nimport sys\n\n# Colab / yerel ortam için kurulum\n!pip install -q qiskit qiskit-machine-learning qiskit-ibm-runtime qiskit-algorithms qiskit-aer\n!pip install -q scikit-learn numpy pandas python-dotenv matplotlib seaborn\n\nimport numpy as np\nimport pandas as pd\nfrom dotenv import load_dotenv\n\nload_dotenv()\nibm_api_key = os.getenv(\"4m7liHJ0oixIXNCkwEAplqfcTjDLcVBfxDH4sNlt6Hgs\")  # opsiyonel\n\nprint(\"Kütüphaneler yüklendi.\")\nprint(f\"IBM API anahtarı {'tanımlı' if ibm_api_key else 'tanımlı değil (sadece simülatör kullanılacak)'}.\")\n",
   "execution_count": 7,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Kütüphaneler yüklendi.\n",
      "IBM API anahtarı tanımlı değil (sadece simülatör kullanılacak).\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "y3U6xHG04I89"
   },
   "source": "## AŞAMA 3: Veri Tipi, Nitelikler ve Boyut İndirgeme (PCA)\n\n### Hastane verisinde tipik nitelikler\n- **Demografik (kategorik / sürekli):** yaş, cinsiyet, BMI, sigara, komorbidite sayısı  \n- **Laboratuvar (sürekli):** WBC, CRP, kreatinin, tümör belirteçleri, karaciğer enzimleri…  \n- **Görüntüleme türevi (sürekli, yüksek boyut):** Radiomics veya CNN embedding (50–512 boyut)\n\nHam MR/BT **doğrudan** kuantum devresine verilmez. Klasik özellik çıkarımı sonrası  \nyüksek boyutlu vektör **PCA** ile 4–8 boyuta indirilir (NISQ kübit sınırı).\n\nAşağıdaki fonksiyon, standardizasyon + PCA uygular.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama3_pca",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469916916,
     "user_tz": -180,
     "elapsed": 3776,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "d865edad-17ae-40d0-8d2c-dcedbce75553"
   },
   "source": "from sklearn.decomposition import PCA\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.pipeline import make_pipeline\n\ndef boyut_indirgeme_uygula(X_veri, n_components=4):\n    \"\"\"\n    Kuantum devresine uygun boyut için StandardScaler + PCA.\n    X_veri: (n_samples, n_features) numpy array veya DataFrame\n    \"\"\"\n    pipeline = make_pipeline(\n        StandardScaler(),\n        PCA(n_components=n_components)\n    )\n    X_kucultulmus = pipeline.fit_transform(X_veri)\n    print(f\"Orijinal boyut : {X_veri.shape}\")\n    print(f\"İndirgenmiş   : {X_kucultulmus.shape}\")\n    print(f\"Açıklanan varyans oranı (kümülatif): {pipeline.named_steps['pca'].explained_variance_ratio_.sum():.3f}\")\n    return X_kucultulmus, pipeline\n\n# Örnek (rastgele yüksek boyutlu özellik → 4 boyuta)\nnp.random.seed(42)\nX_ornek = np.random.randn(100, 30)  # 100 hasta, 30 radiomics/tahlil özelliği\nX_4d, pca_pipe = boyut_indirgeme_uygula(X_ornek, n_components=4)\n",
   "execution_count": 8,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Orijinal boyut : (100, 30)\n",
      "İndirgenmiş   : (100, 4)\n",
      "Açıklanan varyans oranı (kümülatif): 0.262\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "fnPHXAkg4I8_"
   },
   "source": "### Kategorik alanların hazırlanması\nCinsiyet, ilaç grubu, komorbidite kodu gibi alanlar One-Hot Encoding ile sayısallaştırılmalıdır.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama3_onehot",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469927497,
     "user_tz": -180,
     "elapsed": 279,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "bfc853b7-eba6-42db-bea0-d1c97487ad87"
   },
   "source": "# Kategorik → One-Hot örneği (hastane bağlamı)\nornek_df = pd.DataFrame({\n    \"Yas\": [45, 62, 38],\n    \"Cinsiyet\": [\"K\", \"E\", \"K\"],\n    \"Komorbidite\": [\"Diyabet\", \"Yok\", \"Hipertansiyon\"]\n})\ndf_one_hot = pd.get_dummies(ornek_df, columns=[\"Cinsiyet\", \"Komorbidite\"], dtype=float)\nprint(\"One-Hot sonrası:\")\nprint(df_one_hot)\n",
   "execution_count": 9,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "One-Hot sonrası:\n",
      "   Yas  Cinsiyet_E  Cinsiyet_K  Komorbidite_Diyabet  \\\n",
      "0   45         0.0         1.0                  1.0   \n",
      "1   62         1.0         0.0                  0.0   \n",
      "2   38         0.0         1.0                  0.0   \n",
      "\n",
      "   Komorbidite_Hipertansiyon  Komorbidite_Yok  \n",
      "0                        0.0              0.0  \n",
      "1                        0.0              1.0  \n",
      "2                        1.0              0.0  \n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "fvYADn3e4I9B"
   },
   "source": "## AŞAMA 4: Sentetik Hasta Verisi Üretimi ve Anonimleştirme (KVKK)\n\nGerçek hasta verisi paylaşmadan modeli geliştirebilmek için **sentetik kohort** üretiriz.  \nArdından KVKK/GDPR uyumlu anonimleştirme adımları uygulanır:\n\n1. Doğrudan tanımlayıcılar (ad, TC, protokol) → hash veya tamamen kaldırılır  \n2. Sadece model özellikleri + anonim ID tutulur  \n3. Kuantum devresine **yalnızca anonim sayısal vektör** gider  \n\nAşağıda iki seçenek vardır:\n- **Sentetik veri üret** (önerilen başlangıç)\n- Kendi CSV’nizi yükleyin (Aşama 5)\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama4_sentetik_anon",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469948487,
     "user_tz": -180,
     "elapsed": 373,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "43328ac7-bd79-49c4-867a-f9658387d729"
   },
   "source": "import hashlib\nimport uuid\nfrom sklearn.datasets import make_classification\n\ndef sentetik_hasta_verisi_uret(n_samples=300, n_features=12, random_state=42):\n    \"\"\"\n    İlaç etkinliği sınıflandırması için sentetik hasta kohortu.\n    Özellikler: tahlil + radiomics benzeri sürekli değerler.\n    Hedef: 0 = ilaç etkisiz, 1 = ilaç etkili\n    \"\"\"\n    X, y = make_classification(\n        n_samples=n_samples,\n        n_features=n_features,\n        n_informative=max(2, n_features // 2),\n        n_redundant=max(0, n_features // 4),\n        n_clusters_per_class=2,\n        class_sep=1.2,\n        random_state=random_state\n    )\n    # Klinik isimlendirme (örnek)\n    feature_names = [f\"Ozellik_{i+1}\" for i in range(n_features)]\n    # İlk birkaçına anlamlı isim verelim\n    klinik_isimler = [\n        \"Yas_norm\", \"BMI_norm\", \"CRP\", \"WBC\", \"Kreatinin\",\n        \"Tumor_marker\", \"Radiomics_1\", \"Radiomics_2\",\n        \"Radiomics_3\", \"Radiomics_4\", \"Karaciger_ALT\", \"Hgb\"\n    ]\n    for i, isim in enumerate(klinik_isimler):\n        if i < n_features:\n            feature_names[i] = isim\n\n    df = pd.DataFrame(X, columns=feature_names)\n    df[\"Ilac_Etkin\"] = y  # 0/1\n\n    # Sahte doğrudan tanımlayıcılar (anonimleştirme demosu için)\n    df[\"Hasta_Ad\"] = [f\"Hasta_{i}\" for i in range(n_samples)]\n    df[\"Protokol_No\"] = [f\"PR-{10000+i}\" for i in range(n_samples)]\n    df[\"TC_Kimlik\"] = [f\"{10000000000+i}\" for i in range(n_samples)]\n\n    return df\n\ndef anonimlestir(df, id_col=\"Anonim_ID\"):\n    \"\"\"\n    Doğrudan tanımlayıcıları kaldırır / hash’ler.\n    Geri dönüşüm için sadece yetkili tarafta tutulacak mapping üretir.\n    \"\"\"\n    mapping = {}\n    anon_ids = []\n    for idx, row in df.iterrows():\n        ham = f\"{row.get('TC_Kimlik','')}-{row.get('Protokol_No','')}-{row.get('Hasta_Ad','')}\"\n        anon = hashlib.sha256(ham.encode()).hexdigest()[:16]\n        anon_ids.append(anon)\n        mapping[anon] = {\n            \"Hasta_Ad\": row.get(\"Hasta_Ad\"),\n            \"Protokol_No\": row.get(\"Protokol_No\"),\n            \"TC_Kimlik\": row.get(\"TC_Kimlik\")\n        }\n\n    # Tanımlayıcı sütunları düşür\n    drop_cols = [c for c in [\"Hasta_Ad\", \"Protokol_No\", \"TC_Kimlik\"] if c in df.columns]\n    df_anon = df.drop(columns=drop_cols).copy()\n    df_anon.insert(0, id_col, anon_ids)\n\n    print(f\"Anonimleştirme tamamlandı. {len(df_anon)} kayıt.\")\n    print(f\"Kaldırılan sütunlar: {drop_cols}\")\n    print(f\"Mapping sözlüğü {len(mapping)} girdi içeriyor (sadece yetkili tarafta saklanmalı).\")\n    return df_anon, mapping\n\n# --- Sentetik kohort üret ve anonimleştir ---\ndf_ham = sentetik_hasta_verisi_uret(n_samples=300, n_features=12)\nprint(\"Ham sentetik veri (ilk 3 satır, tanımlayıcılar görünür):\")\nprint(df_ham[[\"Hasta_Ad\", \"Protokol_No\", \"Yas_norm\", \"CRP\", \"Ilac_Etkin\"]].head(3))\nprint()\n\ndf_anon, deanon_mapping = anonimlestir(df_ham)\nprint(\"\\nAnonim veri (ilk 3 satır):\")\nprint(df_anon.head(3))\n",
   "execution_count": 10,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Ham sentetik veri (ilk 3 satır, tanımlayıcılar görünür):\n",
      "  Hasta_Ad Protokol_No  Yas_norm       CRP  Ilac_Etkin\n",
      "0  Hasta_0    PR-10000  0.327880 -3.429009           0\n",
      "1  Hasta_1    PR-10001  1.096469 -5.153065           0\n",
      "2  Hasta_2    PR-10002 -1.643189  5.067190           0\n",
      "\n",
      "Anonimleştirme tamamlandı. 300 kayıt.\n",
      "Kaldırılan sütunlar: ['Hasta_Ad', 'Protokol_No', 'TC_Kimlik']\n",
      "Mapping sözlüğü 300 girdi içeriyor (sadece yetkili tarafta saklanmalı).\n",
      "\n",
      "Anonim veri (ilk 3 satır):\n",
      "          Anonim_ID  Yas_norm  BMI_norm       CRP       WBC  Kreatinin  \\\n",
      "0  ba65e1d607189a7d  0.327880 -0.125454 -3.429009 -0.966273   0.622677   \n",
      "1  693471c5ba2d6aa9  1.096469  1.223569 -5.153065  0.123042  -2.753199   \n",
      "2  baf585ace757c3cc -1.643189 -0.103255  5.067190  0.676039   4.462769   \n",
      "\n",
      "   Tumor_marker  Radiomics_1  Radiomics_2  Radiomics_3  Radiomics_4  \\\n",
      "0      1.057780    -0.633576    -2.640361    -1.195982     1.127387   \n",
      "1     -2.309980     0.784641    -1.693481    -2.583432     0.700140   \n",
      "2      1.021881    -2.666907     4.191878     3.264531    -0.658737   \n",
      "\n",
      "   Karaciger_ALT       Hgb  Ilac_Etkin  \n",
      "0      -2.404128  0.085893           0  \n",
      "1      -1.881216 -0.625677           0  \n",
      "2       3.296044 -0.175854           0  \n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-LkGTV4N4I9D"
   },
   "source": "## AŞAMA 5: (Opsiyonel) Kendi CSV Dosyanızı Yükleme\n\nSentetik veri yerine gerçek (anonimleştirilmiş) hasta CSV’si kullanmak isterseniz  \naşağıdaki yükleyiciyi kullanın. CSV’de hedef sütun adı tercihen `Ilac_Etkin` olsun.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama5_upload",
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 49,
     "referenced_widgets": [
      "df24bbfdf74a4b9f986d3163434c215b",
      "23cf0be20f784011898658183b452e44",
      "a02ce824de774942a3a462c2b9b768d5"
     ]
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469959366,
     "user_tz": -180,
     "elapsed": 43,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "456f01d4-39da-4f5d-bb5b-71e7ad67e909"
   },
   "source": "import ipywidgets as widgets\nfrom IPython.display import display\nimport io\n\nuploader = widgets.FileUpload(accept=\".csv\", multiple=False, description=\"CSV Yükle\")\ndisplay(uploader)\n\ndef yuklenen_csv_oku(uploader_widget):\n    if not uploader_widget.value:\n        print(\"Henüz dosya yüklenmedi. Sentetik veri (df_anon) kullanılmaya devam eder.\")\n        return None\n    # Colab / Jupyter farkı için esnek okuma\n    uploaded = uploader_widget.value\n    if isinstance(uploaded, dict):\n        file_info = list(uploaded.values())[0]\n        content = file_info[\"content\"]\n    else:\n        file_info = uploaded[0]\n        content = file_info[\"content\"]\n    df = pd.read_csv(io.BytesIO(content))\n    print(f\"Yüklendi: {df.shape[0]} satır, {df.shape[1]} sütun\")\n    print(df.head(3))\n    return df\n\n# Kullanım: df_yuklenen = yuklenen_csv_oku(uploader)\n",
   "execution_count": 11,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "FileUpload(value={}, accept='.csv', description='CSV Yükle')"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "df24bbfdf74a4b9f986d3163434c215b"
      }
     },
     "metadata": {}
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ae-jFYHK4I9F"
   },
   "source": "## AŞAMA 5b: Model İçin Özellik Matrisinin Hazırlanması\n\nAnonim veri üzerinden:\n1. Hedef sütunu ayır  \n2. (Gerekirse) PCA uygula  \n3. Eğitim / test bölünmesi yap\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama5b_hazirlik",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469967142,
     "user_tz": -180,
     "elapsed": 65,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "0eefacbb-7d92-4110-96df-f069772e45dc"
   },
   "source": "from sklearn.model_selection import train_test_split\n\n# Hedef ve özellikler\nTARGET = \"Ilac_Etkin\"\nfeature_cols = [c for c in df_anon.columns if c not in (TARGET, \"Anonim_ID\")]\n\nX = df_anon[feature_cols].values\ny = df_anon[TARGET].values\n\nprint(f\"Özellik matrisi: {X.shape}  |  Hedef dağılımı: {np.bincount(y)}\")\n\n# Boyut yüksekse PCA (seçim aracındaki öneriye göre ayarlayın)\nN_COMPONENTS = 4  # Seçim aracından gelen pca_target değerini buraya yazabilirsiniz\nif X.shape[1] > N_COMPONENTS:\n    X_red, pca_model = boyut_indirgeme_uygula(X, n_components=N_COMPONENTS)\nelse:\n    X_red = StandardScaler().fit_transform(X)\n    print(\"PCA gerekmedi, sadece standardizasyon uygulandı.\")\n\nX_train, X_test, y_train, y_test = train_test_split(\n    X_red, y, test_size=0.25, random_state=42, stratify=y\n)\nprint(f\"Eğitim: {X_train.shape[0]}  |  Test: {X_test.shape[0]}\")\n",
   "execution_count": 12,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Özellik matrisi: (300, 12)  |  Hedef dağılımı: [151 149]\n",
      "Orijinal boyut : (300, 12)\n",
      "İndirgenmiş   : (300, 4)\n",
      "Açıklanan varyans oranı (kümülatif): 0.651\n",
      "Eğitim: 225  |  Test: 75\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "USsqkpbH4I9H"
   },
   "source": "## AŞAMA 6–7: Feature Map ve Ansatz (Kuantum Devresi)\n\n- **Feature Map:** Klasik özellikleri kuantum durumuna kodlar (ZZFeatureMap)  \n- **Ansatz:** Eğitilebilir parametreli devre (RealAmplitudes) — VQC kullanıldığında  \n\nKernel tabanlı QSVM için yalnızca feature map yeterlidir.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama6_7_circuit",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469976289,
     "user_tz": -180,
     "elapsed": 377,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "19ee0fc8-7402-48fa-941a-d0a080e6b39a"
   },
   "source": "from qiskit import QuantumCircuit\nfrom qiskit.circuit.library import zz_feature_map, real_amplitudes\n\nnum_features = X_train.shape[1]\nprint(f\"Kullanılacak kübit / özellik sayısı: {num_features}\")\n\nfeature_map = zz_feature_map(\n    feature_dimension=num_features,\n    reps=2,\n    entanglement=\"linear\"\n)\n\nansatz = real_amplitudes(num_qubits=num_features, reps=3)\n\n# Birleşik devre örneği (VQC için)\nqc = QuantumCircuit(num_features)\nqc.compose(feature_map, inplace=True)\nqc.compose(ansatz, inplace=True)\nqc.measure_all()\n\nprint(\"Feature map + Ansatz hazır.\")\nprint(f\"Feature map derinliği (approx): {feature_map.depth()}\")\n",
   "execution_count": 13,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Kullanılacak kübit / özellik sayısı: 4\n",
      "Feature map + Ansatz hazır.\n",
      "Feature map derinliği (approx): 19\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "qCPCIl4B4I9J"
   },
   "source": "## AŞAMA 8: Kuantum Kernel Oluşturma\n\nFidelityQuantumKernel, veri noktalarının kuantum durumlarındaki benzerliğini hesaplar.  \n`shots` değeri istatistiksel kararlılığı etkiler (1024 iyi bir başlangıçtır).\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama8_kernel",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786469987760,
     "user_tz": -180,
     "elapsed": 103,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "32a1b76a-236c-4fb5-de6d-10bc08a3c913"
   },
   "source": "from qiskit_machine_learning.kernels import FidelityQuantumKernel\nfrom qiskit_algorithms.state_fidelities import ComputeUncompute\nfrom qiskit.primitives import StatevectorSampler\n\nshots = 1024\nsampler = StatevectorSampler()\nfidelity = ComputeUncompute(sampler=sampler)\n\nqkernel = FidelityQuantumKernel(fidelity=fidelity, feature_map=feature_map)\nprint(f\"Kuantum Kernel hazır. Shot sayısı: {shots}\")\n",
   "execution_count": 14,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Kuantum Kernel hazır. Shot sayısı: 1024\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "RJpXwSG04I9L"
   },
   "source": "## AŞAMA 9: Modelin Eğitilmesi (QSVM) — Simülatör\n\nQiskit Machine Learning içindeki QSVC (Quantum Support Vector Classifier) kullanılır.  \nÖnce simülatörde eğitip test skoruna bakıyoruz.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama9_qsvc",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786470510147,
     "user_tz": -180,
     "elapsed": 515212,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "04ebb766-081a-46de-882f-db983ed90e71"
   },
   "source": "from qiskit_machine_learning.algorithms import QSVC\nfrom sklearn.metrics import classification_report, accuracy_score, confusion_matrix\n\n# QSVC — quantum kernel ile SVM\nqsvc = QSVC(quantum_kernel=qkernel)\n\nprint(\"Eğitim başlıyor (simülatör)...\")\nqsvc.fit(X_train, y_train)\n\ny_pred = qsvc.predict(X_test)\nacc = accuracy_score(y_test, y_pred)\nprint(f\"\\nTest doğruluğu: {acc:.3f}\")\nprint(\"\\nSınıflandırma raporu:\")\nprint(classification_report(y_test, y_pred, target_names=[\"Etkisiz\", \"Etkili\"]))\nprint(\"Karmaşıklık matrisi:\")\nprint(confusion_matrix(y_test, y_pred))\n",
   "execution_count": 15,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Eğitim başlıyor (simülatör)...\n",
      "\n",
      "Test doğruluğu: 0.573\n",
      "\n",
      "Sınıflandırma raporu:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "     Etkisiz       0.57      0.61      0.59        38\n",
      "      Etkili       0.57      0.54      0.56        37\n",
      "\n",
      "    accuracy                           0.57        75\n",
      "   macro avg       0.57      0.57      0.57        75\n",
      "weighted avg       0.57      0.57      0.57        75\n",
      "\n",
      "Karmaşıklık matrisi:\n",
      "[[23 15]\n",
      " [17 20]]\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "FIO2pq0m4I9N"
   },
   "source": "## AŞAMA 10: Sonuçların Yorumlanması ve De-Anonimleştirme\n\nKuantum / model çıktısı anonim ID’ler üzerinden gelir.  \nSadece yetkili sistem, saklanan mapping ile gerçek kimliğe dönebilir.\n\n> Üretim ortamında mapping **ayrı, erişim kontrollü** bir serviste tutulmalıdır.  \n> Bu notebook yalnızca eğitim amaçlı demo yapar.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama10_deanon",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786470583558,
     "user_tz": -180,
     "elapsed": 552,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "5d2bbb26-386e-46e6-e7e7-34349b703a08"
   },
   "source": "# Örnek: test setinden birkaç anonim ID için tahmin + de-anonimleştirme\n# (Gerçek pipeline'da X_test satırları ile Anonim_ID eşleştirilir)\n\n# Demo: rastgele 3 anonim ID al\nornek_anon_ids = df_anon[\"Anonim_ID\"].sample(3, random_state=1).tolist()\n\nprint(\"Örnek de-anonimleştirme (sadece yetkili erişim):\")\nfor aid in ornek_anon_ids:\n    gercek = deanon_mapping.get(aid, {})\n    print(f\"  Anonim ID : {aid}\")\n    print(f\"  → Gerçek  : {gercek.get('Hasta_Ad')} | Protokol: {gercek.get('Protokol_No')}\")\n    print()\n",
   "execution_count": 16,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Örnek de-anonimleştirme (sadece yetkili erişim):\n",
      "  Anonim ID : 49e829cc817ff435\n",
      "  → Gerçek  : Hasta_189 | Protokol: PR-10189\n",
      "\n",
      "  Anonim ID : f70510305fd56cf0\n",
      "  → Gerçek  : Hasta_123 | Protokol: PR-10123\n",
      "\n",
      "  Anonim ID : 716e0f3fd922a79c\n",
      "  → Gerçek  : Hasta_185 | Protokol: PR-10185\n",
      "\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "rHnfCY7n4I9P"
   },
   "source": "## AŞAMA 11: Sonuçların Dışa Aktarılması (CSV & SQL)\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama11_export"
   },
   "source": "import sqlite3\nimport os\n\n# Tahmin sonuçlarını tabloya dök (demo: test seti)\nsonuc_df = pd.DataFrame({\n    \"y_true\": y_test,\n    \"y_pred\": y_pred\n})\nsonuc_df[\"Dogru_Mu\"] = (sonuc_df[\"y_true\"] == sonuc_df[\"y_pred\"]).astype(int)\n\noutput_dir = \"./sonuclar\"\nos.makedirs(output_dir, exist_ok=True)\ncsv_path = os.path.join(output_dir, \"ilac_etkinligi_tahminleri.csv\")\nsonuc_df.to_csv(csv_path, index=False)\nprint(f\"CSV kaydedildi: {csv_path}\")\n\nconn = sqlite3.connect(\"qml_hastane.db\")\nsonuc_df.to_sql(\"Ilac_Etkinlik_Tahminleri\", conn, if_exists=\"replace\", index=False)\nconn.close()\nprint(\"SQL tablosuna yazıldı: Ilac_Etkinlik_Tahminleri\")\nprint(sonuc_df.head())\n",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "V5QRpZbz4I9R"
   },
   "source": "## AŞAMA 12: Görselleştirme\n\nSınıf dağılımı ve (varsa) kuantum ölçüm histogramı.\n"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "asama12_viz"
   },
   "source": "%matplotlib inline\nimport matplotlib.pyplot as plt\nfrom qiskit.visualization import plot_histogram\n\n# 1) Gerçek vs tahmin sınıf dağılımı\nfig, axes = plt.subplots(1, 2, figsize=(10, 4))\naxes[0].hist(y_test, bins=[-0.5, 0.5, 1.5], rwidth=0.6, color=\"steelblue\")\naxes[0].set_xticks([0, 1])\naxes[0].set_xticklabels([\"Etkisiz\", \"Etkili\"])\naxes[0].set_title(\"Gerçek (y_test)\")\naxes[1].hist(y_pred, bins=[-0.5, 0.5, 1.5], rwidth=0.6, color=\"teal\")\naxes[1].set_xticks([0, 1])\naxes[1].set_xticklabels([\"Etkisiz\", \"Etkili\"])\naxes[1].set_title(\"Tahmin (y_pred)\")\nplt.tight_layout()\nplt.show()\n\n# 2) Örnek kuantum ölçüm histogramı (demo counts)\ndemo_counts = {\"00\": 480, \"01\": 120, \"10\": 95, \"11\": 329}\nfig2 = plot_histogram(demo_counts, title=\"Örnek Kuantum Ölçüm Histogramı\", figsize=(8, 5), color=\"teal\")\ndisplay(fig2)\n",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "IHn_8dIL4I9T"
   },
   "source": "## Özet ve Sonraki Adımlar\n\nBu notebook’ta yapılanlar:\n\n1. **Problem tanımı** — Hastane ilaç etkinliği tahmini (sınıflandırma)  \n2. **Veri büyüklüğü ayrımı** — `n_samples` (hasta sayısı) vs `n_features` (özellik / kübit) netleştirildi  \n3. **Seçim aracı** — Encoding, kübit hesabı, algoritma ve cihaz önerisi  \n4. **Sentetik kohort** + **KVKK anonimleştirme**  \n5. **PCA** ile boyut indirgeme  \n6. **ZZFeatureMap + FidelityQuantumKernel + QSVC** ile eğitim ve test  \n7. **De-anonimleştirme demosu**, CSV/SQL export, görselleştirme  \n\n### Gerçek ortama geçerken\n- Mapping tablosunu kuantum pipeline’ından **ayırın** (ayrı yetkili servis)  \n- Ham görüntüleri yalnızca klasik özellik çıkarımı için kullanın  \n- Gerçek IBM Quantum backend’ine geçmeden önce noise model ile test edin  \n- Klinik validasyon ve etik kurul onayı olmadan üretim kararı vermeyin  \n\n**Colab’da çalıştırma sırası:** Yukarıdan aşağıya hücreleri sırayla Run edin.  \nSeçim aracındaki `n_features` / PCA hedefini Aşama 5b’deki `N_COMPONENTS` ile uyumlu tutun.\n"
  }
 ]
}