2025-12-01 18:34:21 +07:00

164 lines
5.3 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"id": "c0efb2f2-b8bd-43a3-bef6-b8ffbd5b8844",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sedang memproses data...\n",
"Sedang melatih model KNN (15 Tetangga)...\n",
"\n",
"========================================\n",
"HASIL EVALUASI (KNN)\n",
"========================================\n",
"1. Single Split Test:\n",
" - R2 Score (Akurasi) : 0.2060 (20.60%)\n",
" - RMSE (Error Kuadrat): 2.1397\n",
" - MAE (Rata-rata Error): 1.5157 poin\n",
"\n",
"2. Cross Validation (5-Fold):\n",
" - Skor per tes : [0.10580954 0.07685483 0.12809619 0.14718973 0.0873096 ]\n",
" - Rata-rata R2 : 0.1091\n",
" - Kestabilan : +/- 0.0258\n",
"\n",
"========================================\n",
"Contoh Prediksi: Rating Asli 7.0 | Prediksi KNN 5.32\n"
]
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split, cross_val_score\n",
"from sklearn.neighbors import KNeighborsRegressor\n",
"from sklearn.preprocessing import StandardScaler, LabelEncoder\n",
"from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error\n",
"\n",
"# ==========================================\n",
"# 1. LOAD DATA & PREPROCESSING\n",
"# ==========================================\n",
"print(\"Sedang memproses data...\")\n",
"df = pd.read_csv('Latest 2025 movies Datasets.csv')\n",
"\n",
"# Membersihkan data\n",
"df = df.dropna(subset=['release_date', 'vote_average', 'popularity', 'vote_count'])\n",
"df['release_date'] = pd.to_datetime(df['release_date'], errors='coerce')\n",
"df = df.dropna(subset=['release_date'])\n",
"\n",
"# Feature Engineering\n",
"df['release_year'] = df['release_date'].dt.year\n",
"df['release_month'] = df['release_date'].dt.month\n",
"\n",
"# Encoding Bahasa\n",
"le = LabelEncoder()\n",
"df['original_language_encoded'] = le.fit_transform(df['original_language'])\n",
"\n",
"# Fitur & Target\n",
"features = ['popularity', 'vote_count', 'release_year', 'release_month', 'original_language_encoded']\n",
"X = df[features]\n",
"y = df['vote_average']\n",
"\n",
"# Split Data\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# --- SCALING (Wajib untuk KNN) ---\n",
"scaler = StandardScaler()\n",
"X_train_scaled = scaler.fit_transform(X_train)\n",
"X_test_scaled = scaler.transform(X_test)\n",
"\n",
"# Kita juga perlu scale X full untuk Cross Validation nanti\n",
"X_scaled = scaler.transform(X)\n",
"\n",
"# ==========================================\n",
"# 2. TRAINING MODEL (KNN)\n",
"# ==========================================\n",
"print(\"Sedang melatih model KNN (15 Tetangga)...\")\n",
"model = KNeighborsRegressor(n_neighbors=15)\n",
"model.fit(X_train_scaled, y_train)\n",
"\n",
"# ==========================================\n",
"# 3. EVALUASI LENGKAP\n",
"# ==========================================\n",
"print(\"\\n\" + \"=\"*40)\n",
"print(\"HASIL EVALUASI (KNN)\")\n",
"print(\"=\"*40)\n",
"\n",
"# A. Single Split Test\n",
"y_pred = model.predict(X_test_scaled)\n",
"\n",
"r2 = r2_score(y_test, y_pred)\n",
"rmse = np.sqrt(mean_squared_error(y_test, y_pred))\n",
"mae = mean_absolute_error(y_test, y_pred)\n",
"\n",
"print(f\"1. Single Split Test:\")\n",
"print(f\" - R2 Score (Akurasi) : {r2:.4f} ({r2*100:.2f}%)\")\n",
"print(f\" - RMSE (Error Kuadrat): {rmse:.4f}\")\n",
"print(f\" - MAE (Rata-rata Error): {mae:.4f} poin\")\n",
"\n",
"# B. Cross Validation (5-Fold)\n",
"print(f\"\\n2. Cross Validation (5-Fold):\")\n",
"# Kita gunakan X_scaled (data penuh yang sudah di-scale)\n",
"cv_scores = cross_val_score(model, X_scaled, y, cv=5, scoring='r2')\n",
"\n",
"print(f\" - Skor per tes : {cv_scores}\")\n",
"print(f\" - Rata-rata R2 : {cv_scores.mean():.4f}\")\n",
"print(f\" - Kestabilan : +/- {cv_scores.std():.4f}\")\n",
"\n",
"# Contoh Prediksi\n",
"print(\"\\n\" + \"=\"*40)\n",
"print(f\"Contoh Prediksi: Rating Asli {y_test.iloc[0]} | Prediksi KNN {y_pred[0]:.2f}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "784b48b0-d367-47da-912e-b75c91541665",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "ffe5d513-95fe-452f-ba94-2ccd24e455b9",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "fab61e94-fe4a-425f-81c8-ea32d2738733",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}