Sunday, March 26, 2023

Confusion Matrix

Confusion Matrix atau tabel kontingensi adalah tabel dua dimensi yang digunakan untuk mengevaluasi kinerja model Machine Learning pada klasifikasi biner, yaitu klasifikasi yang hanya memiliki dua kelas, misalnya "positif" dan "negatif", atau "spam" dan "non-spam". Confusion Matrix digunakan untuk membandingkan hasil prediksi model dengan nilai yang sebenarnya pada data testing, dan terdiri dari empat jenis metrik evaluasi, yaitu True Positive (TP), False Positive (FP), True Negative (TN), dan False Negative (FN).

Berikut adalah penjelasan dari keempat metrik evaluasi tersebut:

  1. True Positive (TP): Jumlah kasus positif yang diprediksi dengan benar oleh model.
  2. False Positive (FP): Jumlah kasus negatif yang salah diprediksi sebagai positif oleh model.
  3. True Negative (TN): Jumlah kasus negatif yang diprediksi dengan benar oleh model.
  4. False Negative (FN): Jumlah kasus positif yang salah diprediksi sebagai negatif oleh model.

Dari empat metrik evaluasi tersebut, dapat diperoleh metrik evaluasi lain seperti:

  1. Akurasi (Accuracy): Persentase keseluruhan prediksi yang benar dari model. Dihitung dengan (TP + TN) / (TP + TN + FP + FN).
  2. Presisi (Precision): Persentase prediksi positif yang benar dari model. Dihitung dengan TP / (TP + FP).
  3. Recall (Sensitivity atau True Positive Rate): Persentase kasus positif yang diidentifikasi dengan benar oleh model. Dihitung dengan TP / (TP + FN).
  4. F1-Score: Rata-rata harmonis antara Presisi dan Recall. Dihitung dengan 2 * (Presisi * Recall) / (Presisi + Recall).
Confusion Matrix sangat berguna dalam mengevaluasi kinerja model Machine Learning pada klasifikasi biner karena memungkinkan kita untuk memahami dengan jelas di mana model gagal dan di mana model berhasil dalam melakukan klasifikas

Thursday, March 23, 2023

Melakukan Prediksi Menggunakan Machine Learning

Pada tulisan sebelumnya telah dilakukan analisis dengan Korelasi Pearson untuk mengetahui fitur yang paling berpengaruh pada dataset :

DATASET : https://archive.ics.uci.edu/ml/datasets/Energy+efficiency
https://archive.ics.uci.edu/ml/machine-learning-databases/00242/ENB2012_data.xlsx

NAMA FILE : ENB2012_data.xlsx

768 sampel, Setiap sampel terdiri dari 8 fitur numerik yang terdiri dari faktor-faktor seperti luas permukaan, tinggi plafon, dan jenis kaca yang digunakan.


  1. Kolom X1 : compactness relatif dari bangunan (Relative Compactness), yang merupakan rasio antara volume bangunan dan luas permukaan eksterior bangunan.
  2. Kolom X2 : permukaan (Surface Area) dari bangunan.
  3. Kolom : luas dinding (Wall Area) dari bangunan.
  4. Kolom X4 : luas atap (Roof Area) dari bangunan.
  5. Kolom X5: tinggi keseluruhan (Overall Height) dari bangunan.
  6. Kolom X6 : orientasi (Orientation) bangunan. Kolom ini mengindikasikan arah pandang bangunan terhadap matahari, diukur dalam derajat dari utara dalam arah jarum jam.
  7. Kolom X7 : luas kaca (Glazing Area) dari bangunan.
  8. Kolom X8 : distribusi luas kaca (Glazing Area Distribution) pada bangunan.
  9. Kolom Y1 : koefisien transmisi panas (Heat Transmission Coefficient) dari bangunan, yang mengukur seberapa baik bangunan dapat menahan panas dari luar ke dalam.
  10. Kolom Y2 : kehilangan energi pendinginan (Cooling Load) dari bangunan, yang mengukur jumlah energi yang dibutuhkan untuk mendinginkan ruangan dalam bangunan.

Regresi Linier Berganda

Pada data set tersebut akan dilakukan regresi berganda untuk memprediksi nilai Y1 dan Y2, data yang akan diuji akan diambil secara acak sebanyak 20% dari data data latih yang disediakan (dataset)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score, mean_squared_error

# Membaca dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00242/ENB2012_data.xlsx"
df = pd.read_excel(url)

# Mengganti nama kolom pada dataset
df = df.rename(columns={'X1': 'relative compactness',
                        'X2': 'surface area',
                        'X3': 'wall area',
                        'X4': 'roof area',
                        'X5': 'overall height',
                        'X6': 'orientation',
                        'X7': 'glazing area',
                        'X8': 'glazing area distribution',
                        'Y1': 'heating load',
                        'Y2': 'cooling load'})

# Mengambil variabel yang akan digunakan dalam analisis
X = df[['roof area', 'overall height']]
y1 = df['heating load']
y2 = df['cooling load']

# Membagi dataset menjadi data latih dan data uji
from sklearn.model_selection import train_test_split
X_train, X_test, y1_train, y1_test, y2_train, y2_test = train_test_split(X, y1, y2, test_size=0.2, random_state=0)

# Melakukan regresi polinomial pada data latih
poly = PolynomialFeatures(degree=2)
X_poly_train = poly.fit_transform(X_train)
X_poly_test = poly.transform(X_test)
regressor1 = LinearRegression()
regressor1.fit(X_poly_train, y1_train)
regressor2 = LinearRegression()
regressor2.fit(X_poly_train, y2_train)

# Memprediksi nilai y berdasarkan data uji
y1_pred = regressor1.predict(X_poly_test)
y2_pred = regressor2.predict(X_poly_test)

# Menampilkan persamaan regresi
print("Persamaan Regresi Heating Load: Y = {} + {}*X1 + {}*X2 + {}*X1^2 + {}*X2^2 + {}*X1*X2".format(
    regressor1.intercept_, regressor1.coef_[0], regressor1.coef_[1], regressor1.coef_[2], regressor1.coef_[3], regressor1.coef_[4]))
print("Persamaan Regresi Cooling Load: Y = {} + {}*X1 + {}*X2 + {}*X1^2 + {}*X2^2 + {}*X1*X2".format(
    regressor2.intercept_, regressor2.coef_[0], regressor2.coef_[1], regressor2.coef_[2], regressor2.coef_[3], regressor2.coef_[4]))

# Menampilkan plot kurva regresi
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,5))
ax1.scatter(X_test['roof area'], y1_test, color='red')
ax1.plot(X_test['roof area'], y1_pred, color='blue', linewidth=2)
ax1.set_xlabel('roof area')
ax1.set_ylabel('Heating Load')
ax2.scatter(X_test['roof area'], y2_test, color='blue')
ax2.plot(X_test['roof area'], y2_pred, color='red', linewidth=2)
ax2.set_xlabel('roof area')
ax2.set_ylabel('Cooling Load')

# Menampilkan plot kurva regresi
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,5))
ax1.scatter(X_test['overall height'], y1_test, color='red')
ax1.plot(X_test['overall height'], y1_pred, color='blue', linewidth=2)
ax1.set_xlabel('overall height')
ax1.set_ylabel('Heating Load')
ax2.scatter(X_test['overall height'], y2_test, color='blue')
ax2.plot(X_test['overall height'], y2_pred, color='red', linewidth=2)
ax2.set_xlabel('overall height')
ax2.set_ylabel('Cooling Load')

# Menampilkan kolom aktual dan hasil prediksi Y1
result1 = pd.DataFrame({'Actual Y1': y1_test, 'Predicted Y1': y1_pred})
print(result1)

# Menampilkan kolom aktual dan hasil prediksi Y2
result2 = pd.DataFrame({'Actual Y2': y2_test, 'Predicted Y2': y2_pred})
print(result2)

# Menyimpan kolom aktual dan hasil prediksi Y1 dan Y2 ke file excel
with pd.ExcelWriter('predicted_results.xlsx') as writer:
    result1.to_excel(writer, sheet_name='Y1')
    result2.to_excel(writer, sheet_name='Y2')

# Menghitung MAE
from sklearn.metrics import mean_absolute_error
mae1 = mean_absolute_error(y1_test, y1_pred)
mae2 = mean_absolute_error(y2_test, y2_pred)

# Menampilkan nilai R-squared, MSE, dan MAE
print("Heating Load:")
print("R-squared:", r2_score(y1_test, y1_pred))
print("MSE:", mean_squared_error(y1_test, y1_pred))
print("MAE:", mae1)

print("Cooling Load:")
print("R-squared:", r2_score(y2_test, y2_pred))
print("MSE:", mean_squared_error(y2_test, y2_pred))
print("MAE:", mae2)

# Menyimpan nilai R-squared, MSE, dan MAE ke file excel
data = {'R-squared': [r2_score(y1_test, y1_pred), r2_score(y2_test, y2_pred)],
        'MSE': [mean_squared_error(y1_test, y1_pred), mean_squared_error(y2_test, y2_pred)],
        'MAE': [mae1, mae2]}
df = pd.DataFrame(data, index=['Heating Load', 'Cooling Load'])
df.to_excel(writer, sheet_name='Metrics')

HASIL



-----------------------------------------------------------------------------
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score, mean_squared_error

# Membaca dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00242/ENB2012_data.xlsx"
df = pd.read_excel(url)

# Mengganti nama kolom pada dataset
df = df.rename(columns={'X1': 'relative compactness',
                        'X2': 'surface area',
                        'X3': 'wall area',
                        'X4': 'roof area',
                        'X5': 'overall height',
                        'X6': 'orientation',
                        'X7': 'glazing area',
                        'X8': 'glazing area distribution',
                        'Y1': 'heating load',
                        'Y2': 'cooling load'})

# Mengambil variabel yang akan digunakan dalam analisis
X = df[['roof area', 'overall height']]
y1 = df['heating load']
y2 = df['cooling load']

# Membagi dataset menjadi data latih dan data uji
from sklearn.model_selection import train_test_split
X_train, X_test, y1_train, y1_test, y2_train, y2_test = train_test_split(X, y1, y2, test_size=0.2, random_state=0)

# Melakukan regresi polinomial pada data latih
poly = PolynomialFeatures(degree=2)
X_poly_train = poly.fit_transform(X_train)
X_poly_test = poly.transform(X_test)
regressor1 = LinearRegression()
regressor1.fit(X_poly_train, y1_train)
regressor2 = LinearRegression()
regressor2.fit(X_poly_train, y2_train)

# Memprediksi nilai y berdasarkan data uji
y1_pred = regressor1.predict(X_poly_test)
y2_pred = regressor2.predict(X_poly_test)

# Menampilkan persamaan regresi
print("Persamaan Regresi Heating Load: Y = {} + {}*X1 + {}*X2 + {}*X1^2 + {}*X2^2 + {}*X1*X2".format(
    regressor1.intercept_, regressor1.coef_[0], regressor1.coef_[1], regressor1.coef_[2], regressor1.coef_[3], regressor1.coef_[4]))
print("Persamaan Regresi Cooling Load: Y = {} + {}*X1 + {}*X2 + {}*X1^2 + {}*X2^2 + {}*X1*X2".format(
    regressor2.intercept_, regressor2.coef_[0], regressor2.coef_[1], regressor2.coef_[2], regressor2.coef_[3], regressor2.coef_[4]))

# Menampilkan plot kurva regresi
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,5))
ax1.scatter(X_test['roof area'], y1_test, color='red')
ax1.plot(X_test['roof area'], y1_pred, color='blue', linewidth=2)
ax1.set_xlabel('roof area')
ax1.set_ylabel('Heating Load')
ax2.scatter(X_test['roof area'], y2_test, color='blue')
ax2.plot(X_test['roof area'], y2_pred, color='red', linewidth=2)
ax2.set_xlabel('roof area')
ax2.set_ylabel('Cooling Load')

# Menampilkan plot kurva regresi
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,5))
ax1.scatter(X_test['overall height'], y1_test, color='red')
ax1.plot(X_test['overall height'], y1_pred, color='blue', linewidth=2)
ax1.set_xlabel('overall height')
ax1.set_ylabel('Heating Load')
ax2.scatter(X_test['overall height'], y2_test, color='blue')
ax2.plot(X_test['overall height'], y2_pred, color='red', linewidth=2)
ax2.set_xlabel('overall height')
ax2.set_ylabel('Cooling Load')

# Menampilkan kolom aktual dan hasil prediksi Y1
result1 = pd.DataFrame({'Actual Y1': y1_test, 'Predicted Y1': y1_pred})
print(result1)

# Menampilkan kolom aktual dan hasil prediksi Y2
result2 = pd.DataFrame({'Actual Y2': y2_test, 'Predicted Y2': y2_pred})
print(result2)

# Menyimpan kolom aktual dan hasil prediksi Y1 dan Y2 ke file excel
with pd.ExcelWriter('predicted_results.xlsx') as writer:
    result1.to_excel(writer, sheet_name='Y1')
    result2.to_excel(writer, sheet_name='Y2')

# Menghitung MAE
from sklearn.metrics import mean_absolute_error
mae1 = mean_absolute_error(y1_test, y1_pred)
mae2 = mean_absolute_error(y2_test, y2_pred)

# Menampilkan nilai R-squared, MSE, dan MAE
print("Heating Load:")
print("R-squared:", r2_score(y1_test, y1_pred))
print("MSE:", mean_squared_error(y1_test, y1_pred))
print("MAE:", mae1)

print("Cooling Load:")
print("R-squared:", r2_score(y2_test, y2_pred))
print("MSE:", mean_squared_error(y2_test, y2_pred))
print("MAE:", mae2)

# Menyimpan nilai R-squared, MSE, dan MAE ke file excel
data = {'R-squared': [r2_score(y1_test, y1_pred), r2_score(y2_test, y2_pred)],
        'MSE': [mean_squared_error(y1_test, y1_pred), mean_squared_error(y2_test, y2_pred)],
        'MAE': [mae1, mae2]}
df = pd.DataFrame(data, index=['Heating Load', 'Cooling Load'])
df.to_excel(writer, sheet_name='Metrics')

Tuesday, March 21, 2023

Korelasi Pearson untuk Memilih Fitur yang Paling Berpengaruh

DATASET : https://archive.ics.uci.edu/ml/datasets/Energy+efficiency
https://archive.ics.uci.edu/ml/machine-learning-databases/00242/ENB2012_data.xlsx

NAMA FILE : ENB2012_data.xlsx

768 sampel, Setiap sampel terdiri dari 8 fitur numerik yang terdiri dari faktor-faktor seperti luas permukaan, tinggi plafon, dan jenis kaca yang digunakan.


  1. Kolom X1 : compactness relatif dari bangunan (Relative Compactness), yang merupakan rasio antara volume bangunan dan luas permukaan eksterior bangunan.
  2. Kolom X2 : permukaan (Surface Area) dari bangunan.
  3. Kolom : luas dinding (Wall Area) dari bangunan.
  4. Kolom X4 : luas atap (Roof Area) dari bangunan.
  5. Kolom X5: tinggi keseluruhan (Overall Height) dari bangunan.
  6. Kolom X6 : orientasi (Orientation) bangunan. Kolom ini mengindikasikan arah pandang bangunan terhadap matahari, diukur dalam derajat dari utara dalam arah jarum jam.
  7. Kolom X7 : luas kaca (Glazing Area) dari bangunan.
  8. Kolom X8 : distribusi luas kaca (Glazing Area Distribution) pada bangunan.
  9. Kolom Y1 : koefisien transmisi panas (Heat Transmission Coefficient) dari bangunan, yang mengukur seberapa baik bangunan dapat menahan panas dari luar ke dalam.
  10. Kolom Y2 : kehilangan energi pendinginan (Cooling Load) dari bangunan, yang mengukur jumlah energi yang dibutuhkan untuk mendinginkan ruangan dalam bangunan.

Korelasi Pearson adalah salah satu metode yang digunakan untuk memilih fitur-fitur yang paling berpengaruh terhadap sebuah target pada dataset, pada contoh dataset di atas target yang ingin dicapai adalah kolom Y1 dan Y2


#korelasi pearson
import pandas as pd

# Load data from Excel file
df = pd.read_excel("https://archive.ics.uci.edu/ml/machine-learning-databases/00242/ENB2012_data.xlsx")

# Split data into X (independent variables) and y (dependent variables)
X = df.iloc[:, :-2]
y1 = df.iloc[:, -2]
y2 = df.iloc[:, -1]

# Calculate Pearson correlation coefficients between X and y1
corr_y1 = X.corrwith(y1, method='pearson')

# Calculate Pearson correlation coefficients between X and y2
corr_y2 = X.corrwith(y2, method='pearson')

# Create dataframe with correlation coefficients
results = pd.DataFrame({"Y1_corr": corr_y1, "Y2_corr": corr_y2})

# Sort dataframe by absolute correlation coefficient for Y1 and Y2
results = results.reindex(results["Y1_corr"].abs().sort_values(ascending=False).index)
results = results.reindex(results["Y2_corr"].abs().sort_values(ascending=False).index)

# Print results
print("Variables with highest correlation for Y1:")
print(results["Y1_corr"].head())

print("\nVariables with highest correlation for Y2:")
print(results["Y2_corr"].head())

HASIL


dari hasil tersebut dapat dilihat bahwa fitur yang paling berpengaruh terhadap Y1 dan Y2 adalah fitur X4 (Roof Area) dan X5 (
Overall Height)

KORELASI PEARSON

Analisis korelasi Pearson dan Spearman merupakan teknik statistik yang digunakan untuk mengukur kekuatan dan arah hubungan antara dua variabel. Dalam konteks dataset Energy Efficiency, analisis korelasi Pearson dan Spearman digunakan untuk menentukan hubungan antara variabel masukan dan variabel keluaran.

Dalam dataset Energy Efficiency, analisis korelasi Pearson digunakan untuk mengukur hubungan linear antara variabel masukan dan variabel keluaran. Hasil analisis korelasi Pearson menunjukkan bahwa 'roof area''overall heigh’ memiliki korelasi yang kuat dengan variabel keluaran "heating load" dan "cooling load".