Wisnu Tubagus
Di proyek ini, saya mengembangkan sebuah model prediksi menggunakan Random Forest Regressor untuk memperkirakan tingkat CO2. Saya mulai dengan membersihkan dan memproses data CSV yang terdiri dari timestamp dan berbagai fitur terkait lingkungan. Setelah mengisi nilai yang hilang dan menangani anomali, saya melakukan penskalaan fitur dan membagi data menjadi set pelatihan dan pengujian. Kemudian, saya melatih model menggunakan set pelatihan dan mengevaluasi kinerjanya dengan metrik Mean Squared Error (MSE) dan R-squared (R2) pada set pengujian. Setelah memvalidasi model, saya menyimpannya ke dalam file untuk digunakan di masa depan. Selanjutnya, saya menggunakan model yang disimpan untuk memprediksi tingkat CO2 untuk setiap menit besok, dengan menghasilkan tabel prediksi dan visualisasi grafik untuk memperlihatkan tren prediksi secara waktu.
saya melakukan analisis data menggunakan Pandas, sebuah library populer di Python untuk manipulasi dan analisis data. Data yang digunakan adalah file CSV yang disimpan di Google Drive, berisi informasi dengan kolom timestamp. Tujuan dari proyek ini adalah memuat data dari Google Drive, mengonversi kolom timestamp menjadi tipe data datetime, dan memberikan gambaran awal mengenai data melalui beberapa metode eksplorasi data dasar seperti menampilkan beberapa baris pertama, informasi umum tentang dataset, dan statistik deskriptif.
from google.colab import drive file_path = '/content/drive/MyDrive/Eddy/data_bersih.csv' # Mengubah timestamp menjadi datetime dengan mengabaikan error # Menampilkan beberapa baris pertama data # Menampilkan informasi umum tentang data # Menampilkan statistik deskriptif dari data |
Setelah melakukan eksplorasi data awal, langkah selanjutnya adalah melakukan visualisasi distribusi variabel penting dalam dataset. Saya menggunakan Matplotlib dan Seaborn untuk membuat plot distribusi CO2 dan arah angin. Visualisasi ini membantu dalam memahami pola dan karakteristik dari data tersebut.
import matplotlib.pyplot as plt # Menampilkan distribusi CO2 # Menampilkan distribusi arah angin |
Dalam bagian ini, saya membuat visualisasi matriks korelasi untuk melihat hubungan antara variabel-variabel dalam dataset. Saya menggunakan Seaborn untuk membuat heatmap dari matriks korelasi ini. Visualisasi ini membantu dalam mengidentifikasi hubungan linear antara variabel yang berbeda.
import matplotlib.pyplot as plt plt.figure(figsize=(12, 8)) |
Pada tahap ini, saya menangani missing values dan outliers dalam dataset. Missing values diisi dengan mean dari masing-masing kolom, sedangkan outliers ditangani dengan mengganti nilai yang berada di luar range tertentu dengan nilai batasnya. Ini dilakukan untuk menjaga integritas data tanpa menghapus baris yang mungkin berisi informasi penting.
# Mengisi missing values dengan mean # Menangani outliers dengan mengganti nilai yang berada di luar range dengan nilai batas (bukan menghapus baris) # Menangani outliers untuk semua kolom kecuali timestamp print(data_filled.describe()) |
Pada tahap ini, saya melakukan standarisasi data menggunakan StandardScaler dari Scikit-Learn. Standarisasi dilakukan untuk memastikan setiap fitur memiliki skala yang sama, yang penting untuk algoritma machine learning yang sensitif terhadap skala data. Saya menghapus kolom timestamp sebelum standarisasi dan kemudian menggabungkannya kembali setelah transformasi.
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() # Mengubah kembali ke DataFrame dengan nama fitur yang sama print(data_scaled.head()) |
Pada tahap ini, saya membagi dataset menjadi data pelatihan dan data pengujian menggunakan train_test_split dari Scikit-Learn. Tujuan dari pembagian ini adalah untuk melatih dan menguji model prediksi CO2 menggunakan semua fitur kecuali timestamp.
from sklearn.model_selection import train_test_split # Misalnya, prediksi CO2 menggunakan semua fitur kecuali timestamp X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
Pada tahap ini, saya menggunakan StandardScaler dari Scikit-Learn untuk melakukan standarisasi terhadap data pelatihan (X_train) dan data pengujian (X_test). Standarisasi dilakukan agar semua fitur memiliki skala yang sama, yang penting untuk algoritma machine learning yang sensitif terhadap skala data.
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() |
Pada tahap ini, saya melakukan filter terhadap data berdasarkan rentang waktu yang relevan dari kolom timestamp. Data yang sudah difilter kemudian digunakan untuk membuat grafik yang menampilkan hubungan antara timestamp dan konsentrasi CO2. Visualisasi ini membantu dalam memahami pola atau tren CO2 dari waktu ke waktu.
import pandas as pd # Filter data berdasarkan rentang waktu yang relevan # Plot grafik timestamp vs CO2 dari data yang sudah difilter |
Pada tahap ini, saya melakukan filter data berdasarkan rentang waktu yang relevan dari kolom timestamp. Setelah itu, saya mengambil hanya 30 menit pertama dari data yang sudah difilter. Grafik yang dihasilkan menampilkan hubungan antara timestamp dan konsentrasi CO2 selama 30 menit pertama dari data yang difilter. Visualisasi ini membantu dalam analisis lebih mendalam terhadap perubahan CO2 pada periode waktu yang singkat.
import pandas as pd # Filter data berdasarkan rentang waktu yang relevan (dari menit 0.6 hingga 36) # Ambil hanya 30 menit pertama dari data yang sudah difilter # Plot grafik timestamp vs CO2 dari 30 menit pertama data yang sudah difilter |
Pada tahap ini, saya melakukan filter data berdasarkan rentang waktu yang relevan dari kolom timestamp (jika diperlukan). Kemudian, saya mengambil hanya 30 menit pertama dari data yang sudah difilter. Selanjutnya, saya meminta input dari pengguna melalui terminal untuk memilih arah angin yang ingin diplot. Setelah validasi input, saya melakukan plot grafik yang menampilkan hubungan antara timestamp dan arah angin yang dipilih.
import pandas as pd # Filter data berdasarkan rentang waktu yang relevan (jika diperlukan) # Ambil hanya 30 menit pertama dari data yang sudah difilter # Input dari terminal untuk memilih arah angin yang ingin diplot # Validasi input arah angin |
Pada tahap ini, saya mempersiapkan data untuk melakukan prediksi konsentrasi CO2 menggunakan Random Forest Regressor. Data diawali dengan filter berdasarkan rentang waktu yang relevan dari kolom timestamp (jika diperlukan). Selanjutnya, saya memisahkan data menjadi data pelatihan dan data pengujian menggunakan train_test_split dari Scikit-Learn.
import pandas as pd # Filter data berdasarkan rentang waktu yang relevan (jika diperlukan) # prediksi CO2 menggunakan semua fitur kecuali timestamp X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
Pada tahap ini, saya membuat model Random Forest Regressor dengan menggunakan RandomForestRegressor dari Scikit-Learn. Model ini diset dengan n_estimators=100 untuk menggunakan 100 pohon keputusan dan random_state=42 untuk hasil yang dapat direproduksi.
Setelah membuat model, saya melatihnya menggunakan data pelatihan (X_train dan y_train).
from sklearn.ensemble import RandomForestRegressor # Buat model Random Forest # Latih model dengan data training |
Pada tahap ini, saya menggunakan model Random Forest Regressor yang telah dilatih sebelumnya dengan data pelatihan (X_train dan y_train). Setelah model dilatih, saya melakukan prediksi terhadap data pengujian (X_test) dan menghitung metrik evaluasi performa model seperti Mean Squared Error (MSE) dan R-squared (R2).
from sklearn.ensemble import RandomForestRegressor # Buat model Random Forest # Latih model dengan data training # Lakukan prediksi dengan data testing # Evaluasi model |
Pada tahap ini, saya mengekstraksi fitur-fitur temporal seperti tahun, bulan, hari, jam, menit, dan detik dari kolom timestamp dalam dataset. Fitur-fitur temporal ini dapat memberikan informasi tambahan yang berguna untuk analisis data terkait dengan variabilitas waktu.
# Ekstraksi fitur-fitur temporal dari timestamp # Menampilkan beberapa baris pertama data yang sudah ditambahkan fitur temporal |
Pada tahap ini, saya melakukan beberapa langkah penting dalam pemrosesan data untuk persiapan model prediksi CO2:
a. Menghapus Kolom Timestamp: Kolom timestamp dihapus dari dataset karena kita telah mengekstraksi fitur-fitur temporalnya sebelumnya.
b. Menentukan Fitur dan Target: Fitur untuk model adalah semua kolom kecuali co2, sedangkan co2 adalah target yang akan diprediksi.
c. Membagi Data: Data dibagi menjadi data pelatihan (X_train dan y_train) serta data pengujian (X_test dan y_test) menggunakan train_test_split dari Scikit-Learn.
import pandas as pd # Drop kolom timestamp # Menentukan fitur dan target # Membagi data menjadi data training dan testing |
from sklearn.ensemble import RandomForestRegressor # Buat model Random Forest # Latih model dengan data training # Lakukan prediksi dengan data testing # Evaluasi model |
Selanjutnya saya menggunakan joblib.dump untuk menyimpan model Random Forest yang telah dilatih ke dalam sebuah file. File ini dapat digunakan nanti untuk melakukan prediksi di masa mendatang tanpa perlu melatih ulang model.
import joblib # Tentukan path tempat menyimpan model # Simpan model ke file print(f'Model berhasil disimpan di {model_path}') |
Pada tahap selanjutnya, saya menggunakan model Random Forest yang telah dilatih sebelumnya untuk memprediksi tingkat CO2 untuk setiap menit besok.
import pandas as pd # Load the trained model # Generate future dates from 00:00 to 23:59 for tomorrow # Extract temporal features from future timestamps # Load the original data to get column names and default values # Ensure future_data has all the columns that were used in training # Reorder columns to match the training data # Predict CO2 levels for each minute of tomorrow # Ensure 'prediction_table' or 'future_dates' has correct values from 'future_predictions' # Print the first few rows to verify # Visualize the prediction results # Optionally, save 'prediction_table' to a CSV file |