{"id":28487608,"url":"https://github.com/addsarah/diabet-predictive-analytics","last_synced_at":"2026-01-31T04:31:31.295Z","repository":{"id":292367222,"uuid":"973020531","full_name":"addsarah/diabet-predictive-analytics","owner":"addsarah","description":"Applied Machine Learning Expert Dicoding - Predictive Analytics, last update 13 May 2025","archived":false,"fork":false,"pushed_at":"2025-08-01T16:16:57.000Z","size":2071,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-01T18:33:12.465Z","etag":null,"topics":["dicoding","keras","machine-learning","predictive-analytics","python","sklearn","tensorflow","tfidf"],"latest_commit_sha":null,"homepage":"https://colab.research.google.com/drive/1-4jp7nf0kXh7rHkq8DUAEiq8QFgy7OLb?usp=sharing","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/addsarah.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-26T04:56:37.000Z","updated_at":"2025-08-01T16:17:01.000Z","dependencies_parsed_at":"2025-08-01T18:08:59.209Z","dependency_job_id":"5647baea-da86-482b-a850-3d5ddaa54b63","html_url":"https://github.com/addsarah/diabet-predictive-analytics","commit_stats":null,"previous_names":["addsarah/diabet-predictive-analytics"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/addsarah/diabet-predictive-analytics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/addsarah%2Fdiabet-predictive-analytics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/addsarah%2Fdiabet-predictive-analytics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/addsarah%2Fdiabet-predictive-analytics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/addsarah%2Fdiabet-predictive-analytics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/addsarah","download_url":"https://codeload.github.com/addsarah/diabet-predictive-analytics/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/addsarah%2Fdiabet-predictive-analytics/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28929701,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T04:05:25.756Z","status":"ssl_error","status_checked_at":"2026-01-31T04:02:35.005Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dicoding","keras","machine-learning","predictive-analytics","python","sklearn","tensorflow","tfidf"],"created_at":"2025-06-08T04:32:01.237Z","updated_at":"2026-01-31T04:31:31.288Z","avatar_url":"https://github.com/addsarah.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# Laporan Proyek Pertama Machine Learning Expert Dicoding: Predictive Analytics - Diabet (split diabet n non) - Sarah Adibah\n\n## Domain Proyek\n\n*Domain proyek ini membahas permasalahan dalam bidang kesehatan, khususnya mengenai prediksi status diabetes berdasarkan data klinis dan demografis pasien.*\n \nProyek ini bertujuan untuk memprediksi apakah seseorang menderita diabetes atau tidak dengan menggunakan fitur-fitur seperti usia, riwayat merokok, tekanan darah, indeks massa tubuh (_BMI_), kadar HbA1c, dan kadar glukosa darah. Data yang digunakan mencakup beragam ras, lokasi, dan kondisi kesehatan pasien, sehingga dapat digunakan untuk membangun model klasifikasi yang dapat membantu deteksi dini diabetes secara lebih akurat.\n\n\u003cimg src=\"https://cdn.rri.co.id/infografis/images/1676072537-prevalensi_diabetes_di_indonesia.jpg\" alt=\"Data Diabetes\" title=\"Data Diabetes\" width=\"100%\"\u003e\n\nDiabetes merupakan salah satu penyakit kronis yang menjadi perhatian global karena jumlah penderitanya yang terus meningkat dari tahun ke tahun. Data dari International Diabetes Federation (IDF) menunjukkan bahwa pada tahun 2021, terdapat sekitar 537 juta penderita diabetes di seluruh dunia. Angka ini diproyeksikan akan meningkat menjadi 643 juta pada tahun 2030 dan mencapai 783 juta pada tahun 2045. [[1]](http://sehatnegeriku.kemkes.go.id/baca/blog/20240110/5344736/saatnya-mengatur-si-manis/)\n\nSecara global, pada tahun 2024, diperkirakan terdapat sekitar 589 juta orang dewasa (usia 20–79 tahun) yang hidup dengan diabetes, dan jumlah ini diprediksi akan mencapai 853 juta pada tahun 2050. Fakta lainnya yang mencengangkan adalah bahwa lebih dari 4 dari 5 orang dewasa (sekitar 81%) yang hidup dengan diabetes tinggal di negara-negara berpenghasilan rendah dan menengah, termasuk Indonesia. [[2]](https://diabetesatlas.org/data-by-location/global/)\n\nDi Indonesia sendiri, pada tahun 2021, tercatat sekitar 19,5 juta penderita diabetes. Angka ini diprediksi meningkat menjadi 28,6 juta pada tahun 2045, menempatkan Indonesia sebagai negara dengan jumlah penderita diabetes kelima terbanyak di dunia . Persoalan ini menjadi perhatian serius dari Kementerian Kesehatan karena diabetes melitus merupakan induk dari berbagai penyakit kronis lainnya yang dapat menurunkan kualitas hidup secara signifikan. [[1]](http://sehatnegeriku.kemkes.go.id/baca/blog/20240110/5344736/saatnya-mengatur-si-manis/)\n\nBerdasarkan latar belakang tersebut, proyek ini bertujuan untuk membangun sebuah *model machine learning* yang dapat memprediksi status diabetes seseorang berdasarkan data klinis dan demografis. Dengan adanya model prediksi ini, diharapkan dapat mendukung deteksi dini diabetes dan membantu pengambilan keputusan di sektor kesehatan preventif, khususnya di negara berkembang seperti Indonesia.\n\n# Business Understanding\n\n## Problem Statements\n\nBerdasarkan latar belakang yang telah dijelaskan di atas, maka diperoleh rumusan masalah yang akan diselesaikan pada proyek ini, yaitu:\n1. Bagaimana cara melakukan tahap persiapan data sebelum digunakan untuk membuat model *machine learning* untuk prediksi diabetes?\n    \n2. Bagaimana cara membuat model *machine learning* untuk memprediksi apakah seseorang menderita diabetes atau tidak berdasarkan data klinis dan demografis?\n\n## Goals\n\nBerdasarkan rumusan masalah yang telah dipaparkan di atas, maka didapatkan tujuan dari proyek ini, yaitu:\n1. Melakukan tahap persiapan data (*data preparation*) sehingga data klinis dan demografis dapat digunakan dengan baik pada model *machine learning*.\n2. Membuat model *machine learning* untuk melakukan analisis prediksi status diabetes dengan tingkat *error* yang rendah dan akurasi yang optimal\n\n## Solution Statements\nTerdapat beberapa solusi yang dapat dilakukan untuk dapat mencapai tujuan dari proyek ini, yaitu:\n - Tahap persiapan data (*data preparation*) dilakukan dengan beberapa langkah berikut:\n - Membagi dataset menjadi dua bagian, yaitu *training data* dan *testing data* dengan rasio 90:10, untuk keperluan pelatihan dan pengujian model.\n - Melakukan *standarisasi* pada fitur numerik seperti `age`, `bmi`, `hbA1c_level`, dan `blood_glucose_level` guna menghindari dominasi fitur tertentu karena skala yang berbeda.\n - Melakukan *encoding* pada fitur kategorikal seperti `gender`, `smoking_history`, `race`, dan `location` agar bisa diproses oleh algoritma *machine learning*.\n\n - Tahap pembangunan model *machine learning* dilakukan dengan menggunakan tiga algoritma berbeda adalah K-Nearest Neighbor (KNN), Random Forest, dan Adaptive Boosting (AdaBoost). Seluruh model akan dievaluasi menggunakan metrik seperti *Mean Squared Error (MSE)* dan akurasi, lalu dibandingkan untuk menentukan algoritma terbaik dalam memprediksi status diabetes berdasarkan data klinis dan demografis.\n\t- **Algoritma K-Nearest Neighbor**\n\tSesuai dengan namanya, yaitu \"sejumlah k-tetangga terdekat\", **K-Nearest Neighbor (KNN)** adalah algoritma _machine learning_ yang termasuk dalam kategori *supervised learning*. Algoritma ini bekerja dengan cara mengelompokkan data berdasarkan kemiripan antara data baru dan sejumlah data (`k`) terdekat di dalam dataset. [[3]](https://dqlab.id/fleksibilitas-kunci-keunggulan-algoritma-k-nearest-neighbors-knn) \nCara kerja algoritma K-Nearest Neighbor adalah sebagai berikut: \n\t\t-   Menentukan jumlah tetangga terdekat (`k`) yang akan digunakan dalam proses klasifikasi.\n\t    -   Menghitung jarak antara data baru terhadap seluruh titik data dalam dataset. Jarak yang umum digunakan meliputi **Euclidean Distance**, **Manhattan Distance**, dan **Minkowski Distance**.\n\t\t-   Mengurutkan hasil perhitungan jarak dari yang paling dekat ke yang paling jauh.  \n\t\t-   Mengambil sejumlah `k` titik dengan jarak terdekat.\n\t    -   Menentukan kelas dari data baru berdasarkan mayoritas kelas dari `k` tetangga terdekat tersebut (untuk klasifikasi).  Jika digunakan untuk regresi, nilai prediksi ditentukan berdasarkan **rata-rata nilai** dari tetangga-tetangga tersebut.\n\t   \u003cbr\u003e\n\t   \u003cimg src=\"https://cdn-images-1.medium.com/v2/resize:fit:800/0*QmLAPLYUDcpJYwvo.png\" alt=\"Ilustrasi Algoritma K-Nearest Neighbor\" title=\"Ilustrasi Algoritma K-Nearest Neighbor\"\u003e\n\t   \n\t   Perhitungan jarak ke tetangga terdekat dapat dilakukan dengan menggunakan metrik sebagai berikut:[[4]](https://www.ibm.com/id-id/think/topics/knn)\n\t     - *Euclidean distance*\n       $$d(x,y)=\\sqrt{\\sum_{i=1}^n (x_i-y_i)^2}$$\n\t     - *Manhattan distance*\n       $$d(x,y)=\\sum_{i=1}^n |x_i-y_i|$$\n\t     - *Hamming distance*\n       $$d(x,y)=\\frac{1}{n}\\sum_{n=1}^{n=n} |x_i-y_i|$$\n\t     - *Minkowski distance*\n       $$d(x,y)=\\left(\\sum_{i=1}^n |x_i-y_i|^p\\right)^\\frac{1}{p}$$\n\t\t\n\t\tAdapun kelebihan dari algoritma K-Nearest Neighbor, yaitu: [[5]](https://www.trivusi.web.id/2022/06/algoritma-knn.html)\n\t\t- Mudah untuk dipahami dan diterapkan, sehingga sangat cocok untuk pemula dalam machine learning.\n\t\t- Mudah menyesuaikan diri dengan perubahan dalam dataset. \n\t\t- KNN hanya memiliki dua hyperparameter utama: nilai K (jumlah tetangga terdekat yang akan diperhitungkan) dan metrik jarak yang digunakan. \n\n\t\tAdapun kekurangan dari algoritma K-Nearest Neighbor, yaitu: [[5]](https://www.trivusi.web.id/2022/06/algoritma-knn.html) \n\t\t- Tidak cocok untuk dataset berukuran besar. \n\t\t- Tidak cocok untuk dimensi tinggi.\n\t\t- Tanpa penskalaan yang benar ([standarisasi dan normalisasi](https://www.trivusi.web.id/2022/09/normalisasi-data.html)), KNN dapat menghasilkan prediksi yang salah karena beberapa fitur memiliki skala yang dominan.\n\t\t- Sensitif terhadap noise, missing value, dan outlier dalam dataset. \n\t\t\t\n\t- **Algoritma Random Forest**\n\tRandom Forest adalah algoritma *machine learning* berbasis *ensemble learning* yang menggabungkan hasil dari banyak *decision tree* melalui proses *bagging*. Setiap pohon menghasilkan prediksi, dan hasil akhir ditentukan berdasarkan vote terbanyak. Semakin banyak jumlah pohon, semakin tinggi akurasi dan semakin kecil risiko *overfitting*.[[6]](https://www.trivusi.web.id/2022/08/algoritma-random-forest.html)\n\t\n\t\t\u003cimg src=\"https://miro.medium.com/v2/resize:fit:1400/1*wDKMZMDywDP_iQ0ZiXr34g.jpeg\" alt=\"Algoritma Random Forest\" title=\"Algortima Random Forest\"\u003e \n\n\t\tCara kerja algoritma Random Forest :\n\t\t- Algoritma memilih sampel acak dari dataset yang disediakan.\n\t\t- Membuat decision tree untuk setiap sampel yang dipilih. Kemudian akan didapatkan hasil prediksi dari setiap decision tree yang telah dibuat.\n\t\t- Dilakukan proses voting untuk setiap hasil prediksi. Untuk masalah klasifikasi menggunakan modus (nilai yg paling sering muncul), sedangkan untuk masalah regresi akan menggunakan mean (nilai rata-rata).\n\t\t-  Algoritma akan memilih hasil prediksi yang paling banyak dipilih (vote terbanyak) sebagai prediksi akhir.[[6]](https://www.trivusi.web.id/2022/08/algoritma-random-forest.html)\n\t\t- Setelah dilakukan pelatihan, prediksi untuk sampel yang tidak terlihat ($x'$) dapat dibuat dengan menghitung rata-rata prediksi dari semua pohon setiap individu model pada $x'$. \n     $$\\hat{f}=\\frac{1}{B}\\sum_{b=1}^{B} f_b(x^{'})$$ [[7]](https://www.ibm.com/think/topics/random-forest)\n\n    \tKelebihan dari Algoritma Random Forest, yaitu:[[8]](https://dqlab.id/serba-serbi-machine-learning-model-random-forest)\n\t\t- Dengan menggunakan teknik bootstrap aggregating (bagging) dan pemilihan fitur acak, Random Forest dapat mengurangi varians dalam model dan meningkatkan generalisasi pada data baru.\n\t\t-  Random Forest menggabungkan beberapa pohon keputusan yang independen, ia memiliki kemampuan yang lebih baik untuk menangani noise dan variasi dalam data, sehingga menghasilkan prediksi yang lebih konsisten dan andal.\n\t\t- Dengan menganalisis sejauh mana setiap fitur berkontribusi dalam memisahkan kelas target, Random Forest dapat memberikan insight berguna tentang fitur mana yang paling informatif.\n\t\t- Dalam Random Forest, pengambilan sampel acak dan pembobotan kelas dapat digunakan untuk mengurangi efek ketidakseimbangan data dan menghasilkan prediksi yang lebih akurat untuk kelas yang kurang representatif.\n    \n   \t\tKekurangan Algoritma Random Forest, yaitu:[[8]](https://dqlab.id/serba-serbi-machine-learning-model-random-forest)\n\t\t- Random Forest memiliki kemampuan untuk menghasilkan prediksi yang akurat. Namun, interpretabilitas model bisa menjadi tantangan. Karena Random Forest terdiri dari banyak pohon keputusan yang digabungkan, sehingga sulit untuk secara langsung menginterpretasikan pengaruh setiap fitur dalam membuat keputusan. \n\t\t- Random Forest memiliki beberapa parameter yang perlu dikonfigurasi, seperti jumlah pohon dalam ensambel, jumlah fitur yang diambil secara acak, dan kriteria pemisahan pada setiap simpul pohon. Memilih parameter yang optimal dapat memerlukan eksperimen dan tuning yang cermat, terutama jika tidak ada pengetahuan sebelumnya tentang dataset yang digunakan.\n\t\t- Random Forest mungkin menghadapi tantangan dalam menangani data dengan dimensi yang sangat tinggi, yaitu ketika jumlah fitur sangat besar dibandingkan dengan jumlah sampel data yang tersedia. Dalam kasus seperti itu, pengambilan sampel acak dan pemilihan fitur acak mungkin tidak efektif dalam mengekstraksi pola yang relevan dan menghasilkan prediksi yang akurat.\n\n\t\t\n\t- **Algoritma Adaptive Boosting**\n\tAdaBoost (Adaptive Boosting) adalah algoritma *ensemble learning* yang melatih beberapa *weak learner* secara berulang, dengan memberi bobot lebih besar pada data yang salah diklasifikasikan. Setiap model diberi bobot berdasarkan performanya, lalu digabung menjadi satu model akhir. Proses ini membantu mengurangi bias dan variansi, serta banyak digunakan di bidang seperti computer vision, NLP, dan deteksi penipuan.[[9]](https://www.trivusi.web.id/2023/07/algoritma-adaboost.html)\n\n\t\u003cimg src=\"https://almablog-media.s3.ap-south-1.amazonaws.com/image_28_7cf514b000.png\" alt=\"Algoritma AdaBoost\" title=\"Algoritma AdaBoost\"\u003e \n\t\n\n\tAlgoritma AdaBoost mengacu kepada metode tertentu untuk melakukan pelatihan *classifier* yang di-*boosted*. Pengklasifikasian tersebut adalah pengklasifikasian dalam bentuk, \n     $$F_T(x)=\\sum_{t=q}^{T}f_t(x)$$\n     di mana setiap $F_T$ adalah *learner* yang lemah yang mengambil objek $x$ sebagai input dan mengembalikan nilai yang menunjukkan kelas objek. Demikian juga pada pengklasifikasi $T$ merupakan nilai positif jika sampel berada dalam kelas positif, dan negatif jika sebaliknya. [[10]](https://aws.amazon.com/id/what-is/boosting/)\n     \n\n   \tAdapun Kelebihan dari Algoritma Adaptive Boosting, yaitu:[[9]](https://www.trivusi.web.id/2023/07/algoritma-adaboost.html)\n\n   \t- Adaboost dapat secara signifikan meningkatkan akurasi prediksi dalam pemodelan machine learning. Dengan menggabungkan weak learners menjadi strong learner, Adaboost dapat mengatasi kesalahan klasifikasi dan meningkatkan kemampuan prediksi model.\n\t - Adaboost efektif dalam menangani data yang kompleks dan memiliki interaksi fitur yang rumit. Dalam kasus di mana hubungan antara fitur-fitur input dan variabel output tidak sederhana, Adaboost dapat menangkap pola yang lebih kompleks daripada weak learners individu.\n\t - Dengan memberikan bobot pada contoh-contoh yang salah diklasifikasikan, Adaboost dapat mengurangi risiko overfitting. Hal ini membantu model untuk tidak terlalu fokus pada contoh-contoh pelatihan yang sulit dan memperbaiki generalisasi pada data uji.\n\t \n\n\tAdapun kekurangan dari Algoritma Adaptive Boosting, yaitu:[[9]](https://www.trivusi.web.id/2023/07/algoritma-adaboost.html)\n\t-  Adaboost cenderung sensitif terhadap data yang mengandung noise atau outlier. Kehadiran contoh-contoh yang tidak representatif atau gangguan dapat mempengaruhi pembelajaran dan menghasilkan model yang kurang akurat.\n\t - Jika dataset pelatihan sangat kecil, terdapat risiko overfitting pada Adaboost. Model yang terlalu kompleks dapat dengan mudah \"menghafal\" contoh-contoh pelatihan dan gagal dalam generalisasi pada data baru.\n\t - Adaboost melibatkan iterasi berulang untuk melatih weak learners dan memperbarui bobot contoh-contoh pelatihan. Oleh karena itu, waktu pelatihan algoritma ini cenderung lebih lama dibandingkan dengan beberapa algoritma machine learning lainnya.\n\n## Data Understanding\n\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Diabetes%20Clinical%20Dataset%20Kaggle%20Dataset.png\" alt=\"Diabetes Clinical Dataset Kaggle Dataset\" title=\"Diabetes Clinical Dataset Kaggle Dataset\"\u003e\n\nData yang digunakan dalam proyek ini adalah  _dataset_  yang diambil dari Kaggle Dataset  [Diabetes Clinical Dataset(100k rows)](https://www.kaggle.com/datasets/ziya07/diabetes-clinical-dataset100k-rows/data)  dengan kategori  _dataset_, yaitu  _Health Conditions_  dan  _Diabetes_. Dalam  _dataset_  tersebut terdapat sebuah  _file_  atau berkas dengan nama  `diabetes_dataset_with_notes.csv`  yang berekstensi (_file format_)  `.csv`  atau  [comma-separated values](https://en.wikipedia.org/wiki/Comma-separated_values \"Comma-separated values\")  berukuran 26,94 MB.\n\nDari  _dataset_  tersebut, masih perlu dilakukan penyesuaian hingga  _dataset_  dapat benar-benar digunakan. Beberapa penyesuaian tersebut, yaitu\n - Menggabungkan kolom `race:AfricanAmerican`, `race:Asian`, `race:Caucasian`, `race:Hispanic`, `race:Other` menjadi satu kolom baru `race`.\n ```python\n race_columns = ['race:AfricanAmerican', 'race:Asian', 'race:Caucasian', 'race:Hispanic', 'race:Other']\ndiabet['race'] = diabet[race_columns].idxmax(axis=1)\ndiabet['race'] = diabet['race'].str.replace('race:', '')\ndiabet.drop(columns=race_columns, inplace=True)\n```\n - Menghapus kolom yang tidak akan digunakan yaitu, kolom `clinical_notes`.\n ``` python\n diabet.drop('clinical_notes', inplace=True, axis=1)\n ```\n \n Kemudian dilakukan proses *Exploratory Data Analysis* (EDA) sebagai investigasi awal untuk menganalisis karakteristik, menemukan pola, anomali, dan memeriksa asumsi pada data dengan menggunakan teknik statistik dan representasi grafis atau visualisasi.\n\n1. **Deskripsi Variabel**  \n   Berikut adalah informasi mengenai variabel-variabel yang terdapat pada *dataset* *Diabet* adalah sebagai berikut,\n   \n\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Deskripsi%20Variabel.png\" alt=\"Deskripsi Variabel\" title=\"Deskripsi Variabel\"\u003e\n\nDari gambar di atas dapat dilihat bahwa terdapat 100.000 baris data dan 12 kolom atribut atau fitur. Di antaranya adalah tiga (3) atribut dengan tipe data `float64` dan lima (5) atribut dengan tipe data `int64`. Selain itu, terdapat empat (4) atribut dengan tipe data `object` yang merepresentasikan data kategorikal seperti `gender`, `location`, `smooking_history`, dan `race`. Berikut adalah keterangan untuk masing-masing variabel,\n- `year` : Tahun pencatatan data dilakukan.\n- `gender` : Jenis kelamin pasien (contoh: Male, Female, Other).\n- `age` : Usia pasien dalam tahun.\n- `location` : Lokasi atau wilayah tempat pasien berada.\n- `hypertension` : Status hipertensi pasien (0 = tidak, 1 = ya).\n- `heart_disease` : Status riwayat penyakit jantung pasien (0 = tidak, 1 = ya).\n- `smoking_history` : Riwayat merokok pasien (contoh: never, current, former, no_info).\n- `bmi` : Body Mass Index (Indeks Massa Tubuh) pasien.\n- `hbA1c_level` : Kadar hemoglobin A1c (%), indikator kadar gula darah jangka panjang.\n- `blood_glucose_level` : Kadar glukosa dalam darah saat ini (mg/dL).\n- `diabetes` : Status diabetes pasien (0 = tidak, 1 = ya).\n- `race` : Kategori ras pasien (contoh: Asian, Hispanic, AfricanAmerican, dll).\n\n2. **Deskripsi Statistik**\n\n|                       | year      | age       | hypertension | heart_disease | bmi       | hbA1c_level | blood_glucose_level | diabetes  |\n|-----------------------|-----------|-----------|--------------|----------------|-----------|-------------|----------------------|-----------|\n| **count**             | 100000.00 | 100000.00 | 100000.00    | 100000.00      | 100000.00 | 100000.00   | 100000.00            | 100000.00 |\n| **mean**              | 2018.36   | 41.89     | 0.0748       | 0.0394         | 27.32     | 5.53        | 138.06               | 0.0850    |\n| **std**               | 1.35      | 22.52     | 0.2632       | 0.1946         | 6.64      | 1.07        | 40.71                | 0.2788    |\n| **min**               | 2015.00   | 0.08      | 0.00         | 0.00           | 10.01     | 3.5         | 80.00                | 0.00      |\n| **25%**               | 2019.00   | 24.00     | 0.00         | 0.00           | 23.63     | 4.8         | 100.00               | 0.00      |\n| **50%**               | 2019.00   | 43.00     | 0.00         | 0.00           | 27.32     | 5.8         | 140.00               | 0.00      |\n| **75%**               | 2019.00   | 60.00     | 0.00         | 0.00           | 29.58     | 6.2         | 159.00               | 0.00      |\n| **max**               | 2022.00   | 80.00     | 1.00         | 1.00           | 95.69     | 9.0         | 300.00               | 1.00      |\n\n\n3. **Menangani Missing Value**\n\n|                     | 0 |\n|---------------------|----------------|\n| year                | 0              |\n| gender              | 0              |\n| age                 | 0              |\n| location            | 0              |\n| hypertension        | 0              |\n| heart_disease       | 0              |\n| smoking_history     | 0              |\n| bmi                 | 0              |\n| hbA1c_level         | 0              |\n| blood_glucose_level | 0              |\n| diabetes            | 0              |\n| race                | 0              |\n| **dtype**           | **int64**      |\n\n   Berdasarkan tabel tersebut, tidak terdapat *missing value*.\n\u003cbr\u003e\n\n4. **Menangani *Outliers***\n\n\t*Outliers* merupakan sampel data yang nilainya berada sangat jauh dari cakupan umum data utama yang dapat merusak hasil analisis data. \n\n\tMemisahkan data pasien dengan label diabetes dan non diabetes\n\t```python\n\tdf_diabetes = diabet[diabet['diabetes'] == 1]\n\tdf_ndiabetes = diabet[diabet['diabetes'] == 0]\n\t```\n\t\n| diabetes | count |\n|----------|-------|\n| 0        | 91500 |\n| 1        | 8500  |\n\n\n\t\n Berikut adalah visualisasi *boxplot* untuk melakukan pengecekan keberadaan *outliers* pada `diabetes` \n\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Menangani%20Outliers%20Diabetes%20-%20Sebelum.png\" alt=\"Menangani Outliers Diabetes - Sebelum\" title=\"Menangani Outliers Diabetes - Sebelum\"\u003e \n\t\n Berdasarkan gambar tersebut, terdapat *outliers* pada fitur `year`, `age`, `hypertension`, `heart_disease`, dan `bmi`. \n\n\n\t\n `non-diabetes`\n\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Menangani%20Outliers%20Non%20Diabetes%20-%20Sebelum.png\" alt=\"Menangani Outliers Non Diabetes - Sesudah\" title=\"Menangani Outliers Non Diabetes - Sesudah\"\u003e\n\nBerdasarkan gambar tersebut, terdapat *outliers* pada fitur `year`, `hypertension`, `heart_disease`, dan `bmi`. \n\nSehingga dilakukan proses pembersihan *outliers* dengan metode IQR (*Inter Quartile Range*). \n\n$$IQR=Q_3-Q_1$$\n   \nKemudian membuat batas bawah dan batas atas untuk mencakup *outliers* dengan menggunakan,\n\n   $BatasBawah=Q_1-1.5*IQR$\n   \n   $BatasAtas=Q_3-1.5*IQR$\n   \n   Setelah dilakukan pembersihan *outliers*, dilakukan kembali visualisasi *outliers* untuk melakukan pengecekan kembali sebagai berikut,\n\n`diabetes`\n\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Menangani%20Outliers%20Diabetes%20-%20Sesudah.png\" alt=\"Menangani Outliers Diabetes - Sesudah\" title=\"Menangani Outliers Diabetes - Sesudah\"\u003e\n\n`non-diabetes`\n\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Menangani%20Outliers%20Non%20Diabetes%20-%20Sesudah.png\" alt=\"Menangani Outliers Non Diabetes - Sesudah\" title=\"Menangani Outliers Non Diabetes - Sesudah\"\u003e\n\n   Setelah dilakukan pembersihan *outliers* menggunakan metode IQR (*Inter Quartile Range*), dapat dilihat bahwa *outliers* telah berkurang pada boxplot di atas. Meskipun *outliers* masih ada pada fitur `age` dan`bmi`, tetapi masih dalam batas aman.\n\t\n   Menggabungkan data diabetes dan non diabetes\n```python\n\tdf_diabet = pd.concat([df_diabetes, df_ndiabetes])\n```\n    \n5. **Univariate Analysis**  \n   Melakukan proses analisis data *univariate* pada fitur-fitur numerik. Proses analisis ini menggunakan bantuan visualisasi histogram untuk masing-masing fitur numerik dan kategorikal.\n\n\t\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Univariate%20Analysis%20Gender.png\" alt=\"Univariate Analysis Gender\" title=\"Univariate Analysis Gender\"\u003e\n\n\tMayoritas pasien berjenis kelamin perempuan (58.7%), diikuti oleh laki-laki (41.3%), dan hanya 0.0% atau 16 orang yang dikategorikan sebagai Other\n\n\t\u003cbr\u003e\n\t\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Univariate%20Analysis%20Location.png\" alt=\"Univariate Analysis Location\" title=\"Univariate Analysis Location\"\u003e\n\t\n \tDistribusi pasien tersebar cukup merata di seluruh negara bagian AS. Lokasi dengan jumlah pasien tertinggi antara lain Nebraska, New Jersey, dan North Dakota, masing-masing menyumbang sekitar 2.1% dari total data. Sementara itu, lokasi dengan jumlah pasien paling sedikit adalah Wisconsin (hanya 2 sampel atau 0.0%) dan Virgin Islands (0.9%). Hal ini menunjukkan bahwa sebagian besar data berasal dari wilayah yang beragam, namun terdapat perbedaan jumlah sampel yang signifikan antar lokasi.\n\t\n\u003cbr\u003e\n\t\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Univariate%20Analysis%20Smoking%20History.png\" alt=\"Univariate Analysis Smoking History\" title=\"Univariate Analysis Smoking History\"\u003e\n\t\n Mayoritas data tidak memiliki informasi riwayat merokok (No Info) sebanyak 38.2%, diikuti oleh pasien yang tidak pernah merokok (never) sebesar 34.5%. Sementara itu, kategori lainnya seperti current (masih merokok), former (mantan perokok), not current, dan ever (pernah merokok) memiliki proporsi yang jauh lebih kecil, masing-masing kurang dari 10%. Hal ini menunjukkan bahwa lebih dari setengah data berasal dari pasien yang tidak pernah merokok atau tidak memiliki informasi lengkap terkait kebiasaan merokok.\n\n\u003cbr\u003e\n\t\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Univariate%20Analysis%20Race.png\" alt=\"Univariate Analysis Race\" title=\"Univariate Analysis Race\"\u003e\n\t\n Setiap kategori ras seperti AfricanAmerican, Caucasian, Hispanic, Asian, dan Other memiliki jumlah sampel yang hampir sama, dengan masing-masing berkisar 19.8% hingga 20.1%. Hal ini menunjukkan bahwa data telah dikonstruksi secara proporsional antar kelompok ras, sehingga tidak terjadi ketimpangan distribusi yang dapat memengaruhi performa model secara bias terhadap kelompok tertentu.\n\n\u003cbr\u003e\n\t\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Univariate%20Analysis.png\" alt=\"Univariate Analysis\" title=\"Univariate Analysis\"\u003e\n\tDari data histogram di atas diperoleh informasi, yaitu:\n\n - `year` menunjukkan seluruh data diambil mayoritas pada tahun 2019.\n\n - `age` memiliki distribusi yang relatif merata dari usia muda hingga tua, tetapi terdapat lonjakan signifikan pada usia sekitar 80 tahun, menandakan banyaknya pasien berusia lanjut.\n\n - `hypertension` didominasi oleh nilai 0, yang berarti sebagian besar pasien tidak memiliki riwayat hipertensi.\n\n - `heart_disease` juga sangat didominasi oleh nilai 0, menunjukkan bahwa sebagian besar pasien tidak memiliki riwayat penyakit jantung.\n\n - `bmi` memiliki distribusi yang mendekati normal, namun terdapat lonjakan tinggi di satu nilai (sekitar 28–30).\n\n - `hbA1c_level` memiliki persebaran data yang beragam, tetapi paling sering berada pada level 6, yang merupakan batas prediabetes.\n\n - `blood_glucose_level` menunjukkan beberapa lonjakan pada nilai tertentu (sekitar 100–150), menunjukkan data tidak tersebar merata dan cenderung dikelompokkan.\n\n - `diabetes` sangat tidak seimbang, dimana mayoritas data menunjukkan pasien tidak menderita diabetes (nilai 0), dan hanya sebagian kecil yang menderita diabetes (nilai 1).\n\n\n 6. **Multivariate Analysis**  \n   Melakukan visualisasi distribusi data pada fitur-fitur numerik dari *dataframe* `diabet`. Visualisasi dilakukan dengan bantuan *library* `seaborn` `pairplot` menggunakan parameter `diag_kind`, yaitu `kde`, untuk melihat perkiraan distribusi probabilitas antar fitur numerik.\n   \u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Multivariate%20Analysis.png\" alt=\"Multivariate Analysis\" title=\"Multivariate Analysis\"\u003e\n   \n7. **Correlation Matrix with Heatmap**\n\n\tMelakukan pengecekan korelasi antar fitur numerik dengan menggunakan visualisasi diagram *heatmap* *correlation matrix*.\n \u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Correlation%20Matrix%20with%20Heatmap.png\" alt=\"Correlation Matrix with Heatmap\" title=\"Correlation Matrix with Heatmap\"\u003e\n\n   Dapat dilihat pada diagram *heatmap* di atas memiliki *range* atau rentang angka dari 1.0 hingga 0.08 dengan keterangan sebagai berikut,\n\n   - Jika semakin mendekati 1, maka korelasi antar fitur numerik semakin kuat bernilai positif.\n     \n   - Jika semakin mendekati 0, maka korelasi antar fitur numerik semakin rendah.\n     \n   - Jika semakin mendekati -1, maka korelasi antar fitur numerik semakin kuat bernilai negatif.\n   \n   Jika korelasi bernilai positif, berarti nilai kedua fitur numerik cenderung meningkat bersama-sama.  \n   \n   Jika korelasi bernilai negatif, berarti nilai salah satu fitur numerik cenderung meningkat ketika nilai fitur numerik yang lain menurun.\n   \n## Data Preparation\n\nPada tahap persiapan data atau *data preparation* dilakukan berdasarkan penjelasan yang sudah dipaparkan pada bagian [Solution Statements](#solution-statements \"Solution Statements\"). Tahap ini penting dilakukan untuk mempersiapkan data sehingga dapat digunakan untuk melatih model *machine learning* dengan baik. Berikut adalah dua tahapan data preparation yang dilakukan, yaitu,\n\n1. **Split Data**  \n   Mengubah fitur kategorikal menjadi numerik menggunakan Label Encoding agar semua data dalam dataset bertipe numerik.\n   ```python\n   categorical_features = ['gender', 'location', 'smoking_history', 'race']\n   le = LabelEncoder()\n   df_diabet[feature] = le.fit_transform(df_diabet[feature])\n   df_diabet.head()\n   ```\n   Pembagian data dilakukan untuk memisahkan data keseluruhan menjadi dua (2) bagian, yaitu data latih (*training data*) dan data uji (*testing data*) dengan perbandingan rasio sebesar 90 : 10 menggunakan `train_test_split`.\n\t```python\n\txTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size=0.1, random_state=123)\n\t```   \n\n\tKemudian diperoleh hasil pembagian data masing-masing, yaitu sebagai berikut,\n\t```python\n\tTotal seluruh sampel : 66511 \n\tTotal data train : 59859 \n\tTotal data test : 6652\n\t```\n2. **Standarisasi pada Fitur Numerik**  \n   Standarisasi fitur numerik menggunakan `StandardScaler` untuk mencegah terjadinya penyimpangan nilai data yang cukup besar. Proses standarisasi tersebut dilakukan dengan mengurangkan nilai rata-rata, lalu membaginya dengan standar deviasi atau simpangan baku untuk menggeser distribusi. Proses standarisasi akan menghasilkan distribusi dengan nilai rata-rata menjadi 0, dan nilai standar deviasi menjadi 1.\n\t```python\n\tscaler = StandardScaler()\n\tscaler.fit(xTrain[numericalFeatures])\n\txTrain[numericalFeatures] = scaler.transform(xTrain.loc[:, numericalFeatures])\n\t```\n\n\n|       | age      | bmi      | hbA1c_level | blood_glucose_level |\n|-------|----------|----------|-------------|----------------------|\n| 57684 | -1.159412 | -1.056342 | 0.576090    | 0.462202             |\n| 51469 | -0.028597 | 0.082958  | -0.475589   | -0.941541            |\n| 59092 | -0.933249 | -0.899889 | 0.671697    | 0.206976             |\n| 72187 | 0.559428  | 1.129990  | 0.193661    | 0.462202             |\n| 34182 | 0.876056  | 0.227376  | 0.480483    | 0.538770             |\n\n\n\n\n```python\n\txTrain[numericalFeatures].describe().round(4)\n```\n\t\n\t\n|                       | age      | bmi      | hbA1c_level | blood_glucose_level |\n|-----------------------|----------|----------|-------------|----------------------|\n| **count**             | 59859.000 | 59859.000 | 59859.000    | 59859.000             |\n| **mean**              | -0.0000   | 0.0000    | 0.0000       | -0.0000               |\n| **std**               | 1.0000    | 1.0000    | 1.0000       | 1.0000                |\n| **min**               | -1.7891   | -2.2839   | -1.9097      | -1.4520               |\n| **25%**               | -0.7976   | -0.6191   | -0.6668      | -0.9415               |\n| **50% (median)**      | -0.0286   | 0.2274    | 0.2893       | 0.0794                |\n| **75%**               | 0.7856    | 0.3517    | 0.6717       | 0.5643                |\n| **max**               | 1.8259    | 4.5158    | 3.3487       | 4.1630                |\n\n\n## Modelling\n\nSetelah dilakukannya tahap *data preparation*, selanjutnya adalah melakukan tahap persiapan model terlebih dahulu sebelum mengembangkan model menggunakan algoritma yang telah ditentukan.\n\nTahap persiapan *dataframe* untuk analisis model menggunakan parameter `index`, yaitu train_mse dan test_mse, serta parameter `columns` yang merupakan algoritma yang akan digunakan untuk melakukan prediksi, yaitu algoritma K-Nearest Neighbor (KNN), Random Forest, dan Adaptive Boosting (AdaBoost).\n```python\nmodels = pd.DataFrame(\n    index   = ['train_mse', 'test_mse'],\n    columns = ['KNN', 'RandomForest', 'Boosting']\n)\n```\n\nKemudian terapkan ketiga algoritma ke dalam model tersebut.\n\n1. **K-Nearest Neighbor (KNN) Algorithm**  \n   Pada algoritma K-Nearest Neighbor digunakan parameter `n_neighbors` dengan nilai k = 10 tetangga dan `metric` bawaan, yaitu Euclidean.\n   \n   ```python\n   knn = KNeighborsRegressor(n_neighbors=10)\n   ```\n   \n   Kemudian akan dilakukan analisis prediksi *error* menggunakan *Mean Squared Error* (MSE) pada data latih (*training data*) dan data uji (*testing data*)\n   \n2. **Random Forest Algorithm**  \n   Pada algoritma K-Nearest Neighbor digunakan parameter `n_estimator` dengan jumlah 50 *trees* (pohon), `max_depth` dengan nilai kedalaman atau panjang pohon 16, `random_state` dengan nilai 55, dan `n_jobs` yang bernilai -1 (pekerjaan dilakukan secara paralel).\n   \n   ```python\n   rf = RandomForestRegressor(n_estimators=50, max_depth=16, random_state=55, n_jobs=-1)\n   ```\n   \n   Kemudian akan dilakukan analisis prediksi *error* menggunakan *Mean Squared Error* (MSE) pada data latih (*training data*) dan data uji (*testing data*)\n   \n3. **Adaptive Boosting (AdaBoost) Algorithm**  \n   Pada algoritma K-Nearest Neighbor digunakan parameter `learning_rate` dengan nilai bobot setiap *regressor* adalah 0.05, dan `random_state` dengan nilai 55.\n   \n   ```python\n   boosting = AdaBoostRegressor(learning_rate=0.05, random_state=55)\n   ```\n   \n   Kemudian akan dilakukan analisis prediksi *error* menggunakan *Mean Squared Error* (MSE) pada data latih (*training data*) dan data uji (*testing data*)\n\nKetiga model yang telah dibangun di atas, akan dilakukan pengujian kinerja untuk masing-masing model yang menggunakan algoritma K-Nearest Neighbor, algoritma Random Forest, dan algoritma Adaptive Boosting. Dari ketiga model tersebut akan diperoleh satu (1) model dengan hasil prediksi yang paling baik dan tingkat *error* yang paling rendah.\n\n## Evaluation\n\nPada tahap evaluasi model, akan dilakukan pengujian untuk melihat algoritma mana yang memberikan hasil prediksi paling baik dan dengan tingkat *error* yang paling rendah. Sebelumnya, akan dilakukan proses standarisasi atau *scaling* pada fitur numerik data uji (*testing data*) agar nilai rata-rata (*mean*) bernilai 0, dan varians bernilai 1.\n\n```python\nxTest.loc[:, numericalFeatures] = scaler.transform(xTest[numericalFeatures])\n```\n\nKemudian evaluasi dari ketiga model, yaitu algoritma K-Nearest Neighbor, Random Forest, dan Adaptive Boosting (AdaBoost) untuk masing-masing data latih (*training data*) dan data uji (*testing data*) dengan melihat tingkat *error*-nya menggunakan *Mean Squared Error* (MSE),\n\n$$MSE=\\frac{1}{N}\\sum_{i=1}^{N} (y_i-y\\\\_pred_i)^2$$\n\ndi mana, nilai $N$ adalah jumlah *dataset*, nilai $y_i$ merupakan nilai sebenarnya, dan $y\\\\_pred$ yaitu nilai prediksinya.\n\nPenggunaan metode metrik *Mean Squared Error* (MSE) memiliki kelebihan, yaitu cukup sederhana dan mudah dipahami dalam melakukan perhitungan. Meskipun begitu, terdapat kelemahan pada metrik ini, yaitu hasil akurasi prediksi yang kecil karena tidak dapat membandingan hasil peramalan tersebut dengan kenyataannya. \n\n```python\nmse = pd.DataFrame(columns=['train', 'test'], index=['KNN', 'RF', 'Boosting'])\nmodelDict = {'KNN': knn, 'RF': rf, 'Boosting': boosting}\nfor name, model in modelDict.items():\n    mse.loc[name, 'train'] = mean_squared_error(y_true=yTrain, y_pred=model.predict(xTrain))/1e3\n    mse.loc[name, 'test']  = mean_squared_error(y_true=yTest,  y_pred=model.predict(xTest))/1e3\n```\n\n\n|           | train     | test      |\n|-----------|-----------|-----------|\n| **KNN**   | 0.000035  | 0.000034  |\n| **RF**    | 0.000016  | 0.000016  |\n| **Boosting** | 0.000053  | 0.000048  |\n\n\nDari data tabel tersebut dapat divisualisasikan pada grafik batang berikut.\n\u003cimg src=\"https://raw.githubusercontent.com/addsarah/diabet-predictive-analytics/refs/heads/main/img/Evaluation%20Graph.png\" alt=\"Evaluation Graph\" title=\"Evaluation Graph\"\u003e\n\nDari visualisasi diagram di atas dapat disimpulkan bahwa,\n\n1. Model dengan algoritma Random Forest memberikan nilai error yang paling kecil, yaitu sebesar 0.000016 pada training error, dan 0.000016 pada testing error. Ini menunjukkan bahwa model mampu melakukan prediksi dengan baik dan memiliki generalisasi yang kuat.\n\n2. Model dengan algoritma K-Nearest Neighbor memiliki tingkat error yang sedang di antara dua algoritma lainnya, dengan nilai training error sebesar 0.000035, dan testing error sebesar 0.000034. Meskipun selisih error kecil, performa Boosting masih berada di bawah Adaptive Boosting dalam hal akurasi prediksi keseluruhan.\n\n3. Model dengan algoritma Adaptive Boosting mengalami error yang lebih besar dibandingkan Random Forest dan K-Nearest Neighbor, dengan nilai training error sebesar 0.000053, dan testing error sebesar 0.000048.\n\nSelanjutnya adalah pengujian prediksi dengan menggunakan beberapa nilai diabetes `df_diabet` dari data uji (*testing*)\n\n\n|       | y_true | prediksi_KNN | prediksi_RF | prediksi_Boosting |\n|-------|--------|---------------|-------------|--------------------|\n| 86159 |   0    |       0       |      0      |         0          |\n\n\nDapat dilihat bahwa prediksi pada model dengan algoritma **Random Forest** memberikan hasil yang **paling mendekati nilai `y_true`** jika dibandingkan dengan model algoritma lainnya.\n  \nNilai `y_true` adalah **0**, yang berarti pasien tersebut **tidak menderita diabetes**, dan ketiga model (`KNN`, `Random Forest`, dan `Boosting`) sama-sama menghasilkan prediksi sebesar **0.0** yang menunjukkan bahwa model memperkirakan pasien tidak mengidap diabetes.\n\nMeskipun dalam kasus ini seluruh model memberikan hasil prediksi yang identik dengan nilai sebenarnya, model **Random Forest** tetap dianggap sebagai model dengan **tingkat *error* paling rendah secara keseluruhan**, berdasarkan evaluasi sebelumnya pada metrik MSE (*Mean Squared Error*).\n\nKesimpulannya adalah model yang digunakan untuk melakukan prediksi **diabetes (binary classification)** memberikan hasil terbaik ketika menggunakan algoritma **Random Forest**, karena mampu menghasilkan prediksi yang akurat dan konsisten dengan nilai `y_true`.\n\n## Referensi\n[1] Saatnya Mengatur Si Manis – Sehat Negeriku. (2024, January 10). Sehat Negeriku. Retrieved May 09, 2025, from https://sehatnegeriku.kemkes.go.id/baca/blog/20240110/5344736/saatnya-mengatur-si-manis/\n\n[2] Global Diabetes Data \u0026 Insights. (n.d.). IDF Diabetes Atlas. Retrieved May 09, 2025, from https://diabetesatlas.org/data-by-location/global/\n\n[3] Zuliasyari, L. (2025, February 10). Fleksibilitas: Kunci Keunggulan Algoritma K-Nearest Neighbors (KNN). DQLab. Retrieved May 09, 2025, from https://dqlab.id/fleksibilitas-kunci-keunggulan-algoritma-k-nearest-neighbors-knn\n\n[4] Apa algoritma k-Nearest Neighbors? (n.d.). IBM. Retrieved May 09, 2025, from https://www.ibm.com/id-id/think/topics/knn\n\n[5] Yuk Kenali Apa itu Algoritma K-Nearest Neighbors (KNN). (2023, September 24). Trivusi. Retrieved May 09, 2025, from https://www.trivusi.web.id/2022/06/algoritma-knn.html\n\n[6] Algoritma Random Forest: Pengertian dan Kegunaannya. (2022, September 17). Trivusi. Retrieved May 09, 2025, from https://www.trivusi.web.id/2022/08/algoritma-random-forest.html\n\n[7] What Is Random Forest? (n.d.). IBM. Retrieved May 09, 2025, from https://www.ibm.com/think/topics/random-forest\n\n[8] Machine Learning Model \u0026 Tutorialnya Membangunnya. (2023, July 18). DQLab. Retrieved May 09, 2025, from https://dqlab.id/serba-serbi-machine-learning-model-random-forest\n\n[9] Algoritma AdaBoost: Pengertian, Cara Kerja, dan Kegunaannya. (2023, July 17). Trivusi. Retrieved May 09, 2025, from https://www.trivusi.web.id/2023/07/algoritma-adaboost.html\n\n[10] Apa itu Boosting? - Penjelasan tentang Boosting dalam Machine Learning? (n.d.). AWS. Retrieved May 09, 2025, from https://aws.amazon.com/id/what-is/boosting/\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faddsarah%2Fdiabet-predictive-analytics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faddsarah%2Fdiabet-predictive-analytics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faddsarah%2Fdiabet-predictive-analytics/lists"}