Update Tambahan
This commit is contained in:
parent
89d1ea6830
commit
eff8effd02
@ -16,14 +16,14 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 1000
|
||||
},
|
||||
"id": "kjLcG0OCTF2h",
|
||||
"outputId": "bf21b7d7-1401-416a-c5d5-c7598696b4f1"
|
||||
"id": "4plQTwDFVf_1",
|
||||
"outputId": "508518c6-ce4a-410f-8351-fd2f88211db7"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
@ -106,57 +106,79 @@
|
||||
"from sklearn.ensemble import RandomForestRegressor\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Load dataset ===\n",
|
||||
"df = pd.read_csv(\"Rice Production Indonesia 2020-2022.csv\")\n",
|
||||
"\n",
|
||||
"# === Encoding provinsi & siapkan fitur-target ===\n",
|
||||
"\n",
|
||||
"# === Encoding & penentuan fitur-target ===\n",
|
||||
"# Provinsi diubah ke dalam bentuk numerik agar bisa diproses oleh model\n",
|
||||
"# X = fitur (input), y = target (Production ton)\n",
|
||||
"df_encoded = df.copy()\n",
|
||||
"df_encoded[\"Provinsi\"] = df_encoded[\"Provinsi\"].astype(\"category\").cat.codes\n",
|
||||
"X = df_encoded.drop(\"Production.(ton)\", axis=1)\n",
|
||||
"y = df_encoded[\"Production.(ton)\"]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Train-test split ===\n",
|
||||
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
|
||||
"# 80% data untuk latih dan 20% data untuk uji\n",
|
||||
"X_train, X_test, y_train, y_test = train_test_split(\n",
|
||||
" X, y, test_size=0.2, random_state=42\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Linear Regression (train & prediksi) ===\n",
|
||||
"# Model regresi dasar untuk memprediksi produksi beras\n",
|
||||
"linreg = LinearRegression()\n",
|
||||
"linreg.fit(X_train, y_train)\n",
|
||||
"y_pred = linreg.predict(X_test)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Evaluasi Linear Regression ===\n",
|
||||
"# MAE, MSE, RMSE mengukur besar kesalahan prediksi\n",
|
||||
"# R² menunjukkan kemampuan model menjelaskan variasi data\n",
|
||||
"mae = mean_absolute_error(y_test, y_pred)\n",
|
||||
"mse = mean_squared_error(y_test, y_pred)\n",
|
||||
"rmse = np.sqrt(mse)\n",
|
||||
"r2 = r2_score(y_test, y_pred)\n",
|
||||
"\n",
|
||||
"print(\"=== Linear Regression Evaluation ===\")\n",
|
||||
"print(\"MAE :\", mae)\n",
|
||||
"print(\"MSE :\", mse)\n",
|
||||
"print(\"RMSE :\", rmse)\n",
|
||||
"print(\"R² :\", r2)\n",
|
||||
"\n",
|
||||
"# === Cross-validation (KFold) ===\n",
|
||||
"\n",
|
||||
"# === Cross Validation (K-Fold) ===\n",
|
||||
"# Menguji kestabilan model dengan cara 5 pembagian data\n",
|
||||
"kf = KFold(n_splits=5, shuffle=True, random_state=42)\n",
|
||||
"cv_scores = cross_val_score(linreg, X, y, cv=kf, scoring='r2')\n",
|
||||
"\n",
|
||||
"print(\"\\n=== Cross Validation (R² Scores) ===\")\n",
|
||||
"print(cv_scores)\n",
|
||||
"print(\"Average R²:\", np.mean(cv_scores))\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Random Forest (train & prediksi) ===\n",
|
||||
"# Model ensemble untuk menangkap pola non-linear\n",
|
||||
"rf = RandomForestRegressor(n_estimators=200, random_state=42)\n",
|
||||
"rf.fit(X_train, y_train)\n",
|
||||
"y_pred_rf = rf.predict(X_test)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Evaluasi Random Forest ===\n",
|
||||
"mae_rf = mean_absolute_error(y_test, y_pred_rf)\n",
|
||||
"mse_rf = mean_squared_error(y_test, y_pred_rf)\n",
|
||||
"rmse_rf = np.sqrt(mse_rf)\n",
|
||||
"r2_rf = r2_score(y_test, y_pred_rf)\n",
|
||||
"\n",
|
||||
"print(\"\\n=== Random Forest Evaluation ===\")\n",
|
||||
"print(\"MAE :\", mae_rf)\n",
|
||||
"print(\"MSE :\", mse_rf)\n",
|
||||
"print(\"RMSE :\", rmse_rf)\n",
|
||||
"print(\"R² :\", r2_rf)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Visualisasi: Linear Regression (Actual vs Predicted) ===\n",
|
||||
"print(\"\\n=== Visualisasi Linear Regression ===\")\n",
|
||||
"plt.figure(figsize=(8,6))\n",
|
||||
@ -170,6 +192,7 @@
|
||||
"plt.tight_layout()\n",
|
||||
"plt.show()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Visualisasi: Random Forest (Actual vs Predicted) ===\n",
|
||||
"print(\"\\n=== Visualisasi Random Forest ===\")\n",
|
||||
"plt.figure(figsize=(8,6))\n",
|
||||
@ -183,18 +206,26 @@
|
||||
"plt.tight_layout()\n",
|
||||
"plt.show()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# === Visualisasi: Perbandingan R² ===\n",
|
||||
"print(\"\\n=== Visualisasi Perbandingan R² ===\")\n",
|
||||
"plt.figure(figsize=(8,6))\n",
|
||||
"bars = plt.bar([\"Linear Regression\", \"Random Forest\"],\n",
|
||||
" [r2, r2_rf],\n",
|
||||
" width=0.5,\n",
|
||||
" edgecolor='black')\n",
|
||||
"bars = plt.bar(\n",
|
||||
" [\"Linear Regression\", \"Random Forest\"],\n",
|
||||
" [r2, r2_rf],\n",
|
||||
" width=0.5,\n",
|
||||
" edgecolor='black'\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"for bar in bars:\n",
|
||||
" height = bar.get_height()\n",
|
||||
" plt.text(bar.get_x() + bar.get_width()/2, height + 0.01, f\"{height:.3f}\",\n",
|
||||
" ha='center', fontsize=12)\n",
|
||||
" plt.text(\n",
|
||||
" bar.get_x() + bar.get_width()/2,\n",
|
||||
" height + 0.01,\n",
|
||||
" f\"{height:.3f}\",\n",
|
||||
" ha='center',\n",
|
||||
" fontsize=12\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"plt.ylabel(\"R² Score\")\n",
|
||||
"plt.title(\"Model Performance Comparison\")\n",
|
||||
|
||||
32
README.md
32
README.md
@ -5,7 +5,7 @@ Anggota Kelompok:
|
||||
3. Silviani Rizki (202310715239)
|
||||
|
||||
# Ketentuan Tugas
|
||||
1. Mencari dataset yang terdapat pada website https://www.kaggle.com/
|
||||
1. Mencari dataset yang terdapat pada website https://www.kaggle.com/datasets/rizal1015/rice-production-in-indonesia
|
||||
2. Tentukan algoritma (klasifikasi, regresi, atau klastering) yang paling cocok untuk data tersebut
|
||||
3. Lakukan evaluasi model pada data yang sudah ada
|
||||
4. Lakukan juga cross validation untuk memastikan bahwa hasil prediksi model tidak jauh berbeda dari pola asli dalam data
|
||||
@ -13,7 +13,7 @@ Anggota Kelompok:
|
||||
|
||||
# Produksi Beras Indonesia Tahun 2020–2022
|
||||
|
||||
Sumber dataset: https://www.kaggle.com/
|
||||
Sumber dataset: https://www.kaggle.com/datasets/rizal1015/rice-production-in-indonesia
|
||||
|
||||
Beras merupakan komoditas pangan utama di Indonesia dan memiliki peran strategis dalam menjaga stabilitas ekonomi, sosial, dan ketahanan pangan nasional. Sebagai negara agraris, sebagian besar penduduk Indonesia menggantungkan hidup pada sektor pertanian, sehingga produksi beras tidak hanya menjadi indikator kesejahteraan petani, tetapi juga penentu kestabilan harga dan ketersediaan pangan bagi masyarakat luas.
|
||||
|
||||
@ -23,6 +23,11 @@ Data produksi beras per provinsi pada tahun 2020–2022 memberikan gambaran meng
|
||||
|
||||
Dengan menganalisis dataset ini menggunakan metode machine learning, kita dapat memahami pola produksi, memprediksi hasil produksi di masa mendatang, serta memberikan wawasan bagi pemerintah dan pemangku kepentingan dalam merumuskan kebijakan yang lebih tepat untuk menjaga ketahanan pangan nasional. Dataset ini memuat informasi produksi per provinsi yang merefleksikan variasi agronomis, kondisi lahan, serta keberhasilan program peningkatan produktivitas di berbagai wilayah. Sebagai komoditas strategis, perubahan produksi beras memiliki implikasi langsung terhadap stabilitas pangan nasional, sehingga analisis kuantitatif berbasis data diperlukan untuk mendukung perumusan kebijakan yang lebih presisi.
|
||||
|
||||
# Inti Pengolahan Dataset
|
||||
Pada proyek ini dilakukan pengolahan dataset Produksi Beras Indonesia Tahun 2020–2022 menggunakan pendekatan machine learning. Dalam penelitian ini, Production (ton) ditetapkan sebagai variabel target, yaitu nilai yang ingin diprediksi oleh model. Sementara itu, variabel lainnya pada dataset digunakan sebagai fitur (variabel independen) yang berperan dalam membantu model mempelajari pola dan hubungan yang terdapat dalam data. Fitur-fitur tersebut merepresentasikan kondisi produksi di masing-masing provinsi dan periode waktu tertentu.
|
||||
|
||||
Melalui proses pelatihan model menggunakan data historis, algoritma machine learning diharapkan mampu mengenali keterkaitan antara fitur input dan nilai produksi beras, sehingga dapat menghasilkan prediksi yang mendekati kondisi aktual. Pendekatan ini memungkinkan analisis dilakukan secara kuantitatif dan objektif, serta memberikan gambaran mengenai pola produksi beras di Indonesia selama periode pengamatan.
|
||||
|
||||
# Analisis Dataset: Regression
|
||||
|
||||
Algoritma yang paling cocok untuk mengolah dataset ini adalah **Regresi**, karena variabel target berupa angka (jumlah produksi beras dalam ton).
|
||||
@ -47,7 +52,7 @@ Regresi merupakan bagian dari supervised learning, di mana model mempelajari hub
|
||||
4. Model regresi dapat dievaluasi dengan metrik kuantitatif (R², MSE, RMSE).
|
||||
5. Mendukung cross validation untuk mengukur konsistensi model.
|
||||
|
||||
# Evaluasi Model
|
||||
# Evaluasi & Hasil Model
|
||||
Evaluasi model dilakukan untuk memastikan bahwa algoritma yang digunakan mampu memberikan prediksi yang akurat dan sesuai dengan pola data produksi beras yang sebenarnya. Dalam penelitian ini digunakan tiga metrik utama, yaitu R² Score, MSE, dan RMSE, yang masing-masing memiliki fungsi berbeda dalam menilai kualitas prediksi dengan membandingkan Linear Regression dan Random Forest Regression sehingga dapat ditentukan model mana yang memberikan performa terbaik.
|
||||
|
||||
Model dievaluasi menggunakan:
|
||||
@ -59,6 +64,27 @@ R² Score digunakan untuk mengukur sejauh mana model dapat menjelaskan variasi d
|
||||
|
||||
Mean Squared Error (MSE) dan Root Mean Squared Error (RMSE) digunakan untuk mengukur besarnya kesalahan prediksi. MSE memberikan gambaran rata-rata kesalahan kuadrat, sedangkan RMSE merupakan akar dari MSE dan lebih mudah diinterpretasikan karena berada pada satuan yang sama dengan data asli. Nilai MSE dan RMSE yang lebih kecil menandakan bahwa model memiliki tingkat error prediksi yang rendah.
|
||||
|
||||
## Linear Regression:
|
||||
Model Linear Regression digunakan sebagai model dasar (baseline).
|
||||
|
||||
Hasil evaluasi menunjukkan bahwa:
|
||||
1. Model mampu menangkap hubungan umum antara fitur dan produksi beras.
|
||||
2. Namun, karena asumsi hubungan linear, model ini kurang fleksibel dalam menangani variasi data antarprovinsi.
|
||||
3. Nilai R² lebih rendah dibandingkan Random Forest, menunjukkan keterbatasan model dalam menjelaskan variasi data secara keseluruhan.
|
||||
4. Nilai MSE dan RMSE lebih besar, menandakan kesalahan prediksi yang relatif lebih tinggi.
|
||||
|
||||
Model ini berguna untuk memberikan gambaran awal dan interpretasi hubungan antar variabel, tetapi kurang optimal untuk prediksi yang kompleks.
|
||||
|
||||
## Random Forest Regression:
|
||||
Random Forest Regression memberikan performa yang lebih baik dibandingkan Linear Regression.
|
||||
|
||||
Berdasarkan hasil evaluasi:
|
||||
1. Nilai R² lebih tinggi, menunjukkan bahwa model mampu menjelaskan variasi data produksi beras dengan lebih baik.
|
||||
2. Nilai MSE dan RMSE lebih rendah, yang berarti kesalahan prediksi lebih kecil.
|
||||
3. Model mampu menangkap pola non-linear dan interaksi antar variabel yang tidak dapat ditangani oleh Linear Regression.
|
||||
|
||||
Hal ini menunjukkan bahwa Random Forest lebih sesuai digunakan untuk dataset produksi beras yang memiliki karakteristik kompleks dan bervariasi antar wilayah.
|
||||
|
||||
# Cross Validation
|
||||
Cross validation digunakan untuk menguji konsistensi model pada beberapa pembagian data.
|
||||
Metode yang digunakan adalah **K-Fold Cross Validation**, sehingga performa model tidak hanya bergantung pada satu kali train-test split dan hasil evaluasi menjadi lebih akurat.Penerapan juga memberikan jaminan bahwa kinerja model tidak hanya berlaku pada satu subset data tertentu, melainkan konsisten pada berbagai skenario pembagian data. Metode ini penting untuk mengurangi risiko overfitting serta memastikan model memiliki kemampuan generalisasi yang baik.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user