Tugas Besar P. Logika dan Algoritma
Memprediksi Presentase Kemanangan Pokemon Menggunakan Regresi Linear Berganda
Dibuat dan disusun oleh Naufal Reky Ardhana (43322021)
Daftar Isi
- Tugas Besar P. Logika dan Algoritma
Landasan Teori
Apa itu Regresi Linear?
Regresi linear adalah teknik analisis data yang memprediksi nilai data yang tidak diketahui dengan menggunakan nilai data lain yang terkait dan diketahui. Secara matematis memodelkan variabel yang tidak diketahui atau tergantung dan variabel yang dikenal atau independen sebagai persamaan linier. Misalnya, anggaplah Anda memiliki data tentang pengeluaran dan pendapatan Anda untuk tahun lalu. Teknik regresi linier menganalisis data ini dan menentukan bahwa pengeluaran Anda adalah setengah dari penghasilan Anda. Mereka kemudian menghitung biaya masa depan yang tidak diketahui dengan mengurangi separuh pendapatan yang diketahui di masa depan.
Apa itu perbedaan Regresi Linear dan Regresi Linear Berganda?
Regresi linear berganda adalah regresi linier yang memiliki lebih dari satu variabel independen. Regresi linier berganda memiliki lebih dari satu variabel independen, sedangkan regresi linier hanya memiliki satu variabel independen.
Mengapa Regresi Linear Berganda?
Model regresi linier relatif sederhana dan memberikan rumus matematika yang mudah ditafsirkan untuk menghasilkan prediksi. Regresi linier adalah teknik statistik yang sudah ada dan mudah diterapkan pada perangkat lunak dan komputasi. Bisnis menggunakannya untuk mengonversi data mentah secara andal dan dapat diprediksi menjadi kecerdasan bisnis serta wawasan yang dapat ditindaklanjuti. Para ilmuwan di berbagai bidang, termasuk biologi serta ilmu perilaku, lingkungan, dan sosial menggunakan regresi linier untuk melakukan analisis data awal dan memprediksi tren masa depan. Banyak metode ilmu data, seperti machine learning dan kecerdasan buatan, menggunakan regresi linier untuk memecahkan masalah yang kompleks.
Apa itu regresi linier dalam machine learning?
Dalam machine learning, program komputer yang disebut algoritme menganalisis set data besar dan bekerja mundur dari data tersebut untuk menghitung persamaan regresi linier. Ilmuwan data melatih algoritme pada set data yang diketahui atau diberi label terlebih dahulu, kemudian menggunakan algoritme tersebut untuk memprediksi nilai yang tidak diketahui. Data dalam kehidupan nyata lebih rumit daripada contoh sebelumnya. Itu adalah alasan mengapa analisis regresi linier harus memodifikasi atau mengubah nilai data secara matematis untuk memenuhi empat asumsi berikut.
1. Hubungan linier
Hubungan linier harus ada antara variabel independen dan dependen. Untuk menentukan hubungan ini, ilmuwan data membuat plot sebar—kumpulan acak nilai x dan y—untuk melihat apakah nilai tersebut berada di sepanjang garis lurus. Jika tidak, Anda dapat menerapkan fungsi nonlinier seperti akar kuadrat atau log untuk membuat hubungan linier antara dua variabel secara matematis.
2. Independensi (residual)
Ilmuwan data menggunakan residual untuk mengukur akurasi prediksi. Residual adalah selisih antara data yang diamati dengan nilai prediksi. Residual tidak boleh memiliki pola yang dapat diidentifikasi. Misalnya, Anda tidak ingin residual tumbuh semakin besar seiring berjalannya waktu. Anda dapat menggunakan uji matematika yang berbeda, seperti uji Durbin-Watson, untuk menentukan independensi residual. Anda dapat menggunakan data dummy untuk mengganti variasi data apa pun, seperti data musiman.
Rumus Regresi Linear Berganda
Untuk memprediksi nilai y dari x, Anda dapat menggunakan rumus regresi linier berganda sebagai berikut:
Dimana
Contoh Regresi Linear Berganda
Diketahui sebuah data berikut ini:
No | x1 | x2 | x3 | x4 | y |
---|---|---|---|---|---|
1 | 39 | 37 | 40 | 39 | 41 |
2 | 37 | 34 | 35 | 37 | 40 |
3 | 41 | 38 | 38 | 36 | 43 |
4 | 37 | 33 | 37 | 35 | 41 |
5 | 42 | 39 | 40 | 38 | 42 |
6 | 33 | 28 | 31 | 31 | 36 |
7 | 38 | 36 | 35 | 35 | 42 |
8 | 35 | 30 | 32 | 34 | 39 |
9 | 38 | 37 | 31 | 39 | 40 |
10 | 35 | 31 | 35 | 35 | 38 |
11 | 38 | 35 | 44 | 40 | 48 |
12 | 37 | 33 | 38 | 36 | 43 |
13 | 35 | 33 | 36 | 35 | 42 |
14 | 33 | 29 | 30 | 28 | 36 |
15 | 39 | 35 | 38 | 40 | 44 |
16 | 36 | 34 | 35 | 35 | 43 |
17 | 42 | 39 | 36 | 39 | 45 |
18 | 39 | 37 | 35 | 37 | 44 |
19 | 37 | 34 | 39 | 37 | 41 |
20 | 29 | 28 | 35 | 34 | 36 |
Langkah selanjutnya adalah mencari
Contoh untuk mencari
Dari data diatas dapat diperoleh:
Variabel | Nilai |
---|---|
740 | |
680 | |
720 | |
720 | |
820 | |
30474 | |
28026 | |
29633 | |
29635 | |
27570 | |
23344 | |
26146 | |
26088 | |
25354 | |
26743 | |
26764 | |
24592 | |
24627 | |
26051 |
Setelah itu kita akan mencari skor deviasi tiap variabel independen dan variabel dependen.
Contoh untuk mencari skor deviasi
Dari data diatas dapat diperoleh skor deviasi:
Variabel | Nilai |
---|---|
190 | |
224 | |
226 | |
168 | |
148 | |
134 | |
114 | |
146 | |
115 | |
194 | |
103 | |
124 | |
112 | |
147 | |
131 |
Maka persamaan regresi linier berganda untuk empat variabel independen adalah:
Untuk mencari koeffisien
Dengan menggunakan persamaan Simultaneous Equation diatas, maka dapat diperoleh:
Setelah itu kita akan mencari nilai
Dengan bantuan kalkulator online, maka dapat diperoleh:
Dengan demikian persamaan regresi linier berganda untuk empat variabel independen adalah:
Pengaplikasian Regresi Linier Berganda pada Bahasa Pemrograman C
Sebelum membuat program untuk menghitung regresi linear berganda, dibutuhkan alat dan library yang akan digunakan. Berikut adalah alat dan library yang digunakan:
Alat yang digunakan:
Library yang digunakan:
Preparasi Data
- Memuat data dari file csv
#define N 782
CSVFILE file;
char *dataset = "/Users/macbookair/Collage/Logika dan Algoritma/Regresi Linear Berganda/dataset.csv";
long double x1[N], x2[N], x3[N], x4[N], x5[N], x6[N], y[N];
long double y_hat;
int index = 0;
if(csvOpen(&file, dataset)) {
while(csvReadLine(&file)){
x1[index] = file.GetField(&file, "Attack");
x2[index] = file.GetField(&file, "Defense");
x3[index] = file.GetField(&file, "Sp. Atk");
x4[index] = file.GetField(&file, "Sp. Def");
x5[index] = file.GetField(&file, "Speed");
x6[index] = file.GetField(&file, "HP");
y[index] = file.GetField(&file, "Win Percentage");
index++;
}
}
Potongan kode di atas digunakan untuk membuka file csv dan memasukkan data ke dalam array. Data yang digunakan adalah data dari Pokemon.csv yang berisi data dari 800 pokemon.
- Menentukan variabel independen dan dependen
Pokemon memiliki beberapa data, namun hanya beberapa data saja yang bisa digunakan sebagai variabel independen karena data yang lain tidak memiliki korelasi dengan variabel dependen. Berikut adalah data yang digunakan sebagai variabel independen:
Variabel Independen | Deskripsi |
---|---|
Attack | Attack merupakan kekuatan serangan pokemon |
Defense | Defense merupakan kekuatan pertahanan pokemon |
Sp. Atk | Sp. Atk merupakan kekuatan serangan khusus pokemon |
Sp. Def | Sp. Def merupakan kekuatan pertahanan khusus pokemon |
Speed | Speed merupakan kecepatan pokemon |
HP | HP (Hit point) merupakan jumlah nyawa pokemon |
Variabel Dependen | Deskripsi |
---|---|
Win Percentage | Win Percentage merupakan persentase kemenangan dari sebuah pokemon |
Training data
struct multiple_linear_regression regression;
regression.n = N;
linear_regression(x1, x2, x3, x4, x5, x6, y, ®ression);
Potongan kode di atas akan melakukan training data dengan menggunakan fungsi linear_regression
yang ditulis pada library regression.h
yang telah dibuat sebelumnya.
Setelah fungsi linear_regression
selesai melakukan training, maka akan menghasilkan nilai
printf("b0: %Lf\n", regression.result.b0);
printf("b1: %Lf\n", regression.result.b1);
printf("b2: %Lf\n", regression.result.b2);
printf("b3: %Lf\n", regression.result.b3);
printf("b4: %Lf\n", regression.result.b4);
printf("b5: %Lf\n", regression.result.b5);
printf("b6: %Lf\n", regression.result.b6);
Agar lebih terorganisir, maka nilai b0
sampai b6
disimpan pada struct result
yang ada pada struct multiple_linear_regression
Data Prediction
Setelah melakukan training, maka selanjutnya adalah melakukan prediction terhadap data yang belum diketahui. Berikut adalah contoh prediction terhadap data yang belum diketahui:
printf("Input variabel independen: \n");
double x1_input, x2_input, x3_input, x4_input, x5_input, x6_input;
printf("x1 [Attack]: ");
scanf("%lf", &x1_input);
printf("x2 [Defense]: ");
scanf("%lf", &x2_input);
printf("x3 [Sp. Atk]: ");
scanf("%lf", &x3_input);
printf("x4 [Sp. Def]: ");
scanf("%lf", &x4_input);
printf("x5 [Speed]: ");
scanf("%lf", &x5_input);
printf("x6 [HP]: ");
scanf("%lf", &x6_input);
y_hat = predict(®ression, x1_input, x2_input, x3_input, x4_input, x5_input, x6_input);
printf("Jadi presentase kemenangan pokemon tersebut adalah sebanyak %Lf persen\n", y_hat * 100);
Untuk melakukan prediction dapat dilakukan dengan cara memasukkan nilai dari variabel independen yang sudah ditentukan sebelumnya. Setelah itu, nilai y_hat
akan dihasilkan dengan menggunakan fungsi predict
yang ada pada library regression.h
yang telah dibuat sebelumnya.
Demo Program
Sebelum mendemonstrasikan program, lakukan kompilasi terlebih dahulu dengan cara berikut:
gcc csvReader.c regression.c statistics.c main.c -o main
Setelah itu jalankan program dengan cara berikut:
./main
Kesimpulan
Dari tugas besar ini kita belajar, bahwa masa depan memanglah sangat dinamis bahkan tidak bisa diprediksi dengan pasti. Namun, dengan adanya data-data dari masa lalu kita bisa memprediksi masa depan dengan menggunakan metode statistik.
Referensi
- Statistika Untuk Penelitian (Prof. Dr. Sugiyono, M.Pd)
- Teknik Penyusunan Instrumen Penelitian (Prof. Dr. S. Eko Putro Widoyoko, M.Pd.)
- Dataset Pokemon (https://www.kaggle.com/datasets/terminus7/pokemon-challenge)