library(readxl)
train <- read_excel("F:/DATA MINING/UAS DATA MINING/datatraining.xlsx")
test <- read_excel("F:/DATA MINING/UAS DATA MINING/datatesting.xlsx")
str(train)
## tibble [200 × 11] (S3: tbl_df/tbl/data.frame)
##  $ usia                : num [1:200] 15 19 15 15 16 18 16 16 15 21 ...
##  $ jenis_kelamin       : chr [1:200] "0" "0" "0" "1" ...
##  $ nilai_rata_rata     : num [1:200] 85.2 60.9 60.5 78.6 66.2 85.9 45.2 91.6 74.1 88.2 ...
##  $ dukungan_orang_tua  : chr [1:200] "1" "2" "2" "3" ...
##  $ fasilitas_belajar   : chr [1:200] "2" "3" "1" "2" ...
##  $ jam_belajar_per_hari: num [1:200] 4.1 3.8 6.1 5.1 5.5 3.7 2.8 6.2 4.6 3 ...
##  $ kehadiran_persen    : num [1:200] 79.7 89.8 86.7 78.5 81 85.4 78.9 78.1 96.8 82.1 ...
##  $ minat_pada_pelajaran: chr [1:200] "2" "2" "1" "3" ...
##  $ kesulitan_ekonomi   : chr [1:200] "0" "1" "1" "1" ...
##  $ jarak_rumah_sekolah : num [1:200] 11.5 6.3 15.9 9.8 3.5 1 6.4 4.9 6.5 9.5 ...
##  $ motivasi_belajar    : chr [1:200] "1" "2" "1" "2" ...
str(test)
## tibble [15 × 10] (S3: tbl_df/tbl/data.frame)
##  $ usia                : num [1:15] 15 19 17 20 16 21 21 19 17 18 ...
##  $ jenis_kelamin       : chr [1:15] "1" "0" "0" "1" ...
##  $ nilai_rata_rata     : num [1:15] 90.2 79.6 66.9 85.6 65.9 70.8 86.3 84.3 79.5 74.4 ...
##  $ dukungan_orang_tua  : chr [1:15] "2" "1" "2" "3" ...
##  $ fasilitas_belajar   : chr [1:15] "2" "1" "3" "1" ...
##  $ jam_belajar_per_hari: num [1:15] 5.4 4.6 2.9 3.9 5.3 1.9 4.4 1.5 2 5.5 ...
##  $ kehadiran_persen    : num [1:15] 78.3 88.2 76.3 89.4 74 100 100 92.1 84.5 90.3 ...
##  $ minat_pada_pelajaran: chr [1:15] "2" "3" "1" "1" ...
##  $ kesulitan_ekonomi   : chr [1:15] "1" "0" "0" "0" ...
##  $ jarak_rumah_sekolah : num [1:15] 4.7 10.8 11.8 5.7 3.1 7.1 8.2 5.4 4.2 10.7 ...
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(caret)
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(rpart)
library(randomForest)
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## 
## The following object is masked from 'package:dplyr':
## 
##     combine
## 
## The following object is masked from 'package:ggplot2':
## 
##     margin
library(e1071)
# Kolom kategorikal
cat_cols <- c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar", 
              "minat_pada_pelajaran", "kesulitan_ekonomi")

train[cat_cols] <- lapply(train[cat_cols], as.factor)
test[cat_cols] <- lapply(test[cat_cols], as.factor)

for (col in cat_cols) {
  test[[col]] <- factor(test[[col]], levels = levels(train[[col]]))
}

# Konversi target ke faktor
train$motivasi_belajar <- factor(train$motivasi_belajar,
                                 levels = c(1, 2, 3),
                                 labels = c("Rendah", "Sedang", "Tinggi"))

# Hapus baris yang mengandung NA
train <- na.omit(train)

#DECISION TREE

model_tree <- rpart(motivasi_belajar ~ ., data = train, method = "class")
pred_tree <- predict(model_tree, test, type = "class")
str(pred_tree)
##  Factor w/ 3 levels "Rendah","Sedang",..: 2 2 1 2 1 2 2 3 1 2 ...
##  - attr(*, "names")= chr [1:15] "1" "2" "3" "4" ...

#Random Forest

set.seed(42)
model_rf <- randomForest(motivasi_belajar ~ ., data = train, ntree = 100)
pred_rf <- predict(model_rf, test)
str(pred_rf)
##  Factor w/ 3 levels "Rendah","Sedang",..: 2 2 1 2 2 2 2 2 2 2 ...
##  - attr(*, "names")= chr [1:15] "1" "2" "3" "4" ...

#MODEL SVM

model_svm <- svm(motivasi_belajar ~ ., data = train)
pred_svm <- predict(model_svm, test)
str(pred_svm)
##  Factor w/ 3 levels "Rendah","Sedang",..: 2 2 1 2 1 2 2 2 2 2 ...
##  - attr(*, "names")= chr [1:15] "1" "2" "3" "4" ...
hasil <- data.frame(
  No = 1:nrow(test),
  Decision_Tree = pred_tree,
  Random_Forest = pred_rf,
  SVM = pred_svm
)
print(hasil)
##    No Decision_Tree Random_Forest    SVM
## 1   1        Sedang        Sedang Sedang
## 2   2        Sedang        Sedang Sedang
## 3   3        Rendah        Rendah Rendah
## 4   4        Sedang        Sedang Sedang
## 5   5        Rendah        Sedang Rendah
## 6   6        Sedang        Sedang Sedang
## 7   7        Sedang        Sedang Sedang
## 8   8        Tinggi        Sedang Sedang
## 9   9        Rendah        Sedang Sedang
## 10 10        Sedang        Sedang Sedang
## 11 11        Sedang        Rendah Rendah
## 12 12        Rendah        Rendah Rendah
## 13 13        Rendah        Sedang Sedang
## 14 14        Sedang        Sedang Rendah
## 15 15        Rendah        Rendah Rendah