Pada bagian ini akan dilakukan persiapan awal analisis data, mulai dari instalasi package, pemanggilan library, hingga memuat dataset yang akan digunakan pada proses pemodelan.
Dataset yang digunakan adalah “AI Impact on Students” yang berasal dari survei dan sistem informasi akademik selama satu semester penuh. Dataset ini berisi informasi yang mencakup profil akademik, perilaku penggunaan AI, kebiasaan belajar, kebijakan institusi, dan indikator kesehatan mental.
Jalankan instalasi package berikut apabila package belum tersedia pada perangkat masing-masing. Instalasi package cukup dilakukan satu kali saja.
Library berikut digunakan untuk membantu proses eksplorasi data, visualisasi, analisis regresi, serta evaluasi model.
library(readr)
library(dplyr)
library(DataExplorer)
library(skimr)
library(ggplot2)
library(tidyr)
data<-read.csv("E:/Learning/Pelatihan Data Analyst/Data Analyst/Ai_student_impact_dataset (1).csv",header = TRUE)
Tahap eksplorasi data dilakukan untuk memahami karakteristik awal dataset sebelum dilakukan pemodelan. Pada tahap ini, dilakukan pengecekan struktur data, tipe variabel, jumlah observasi, missing value, serta ringkasan statistik deskriptif dari masing-masing variabel.
#eksplorasi data
skim_without_charts(data)
| Name | data |
| Number of rows | 50000 |
| Number of columns | 16 |
| _______________________ | |
| Column type frequency: | |
| character | 8 |
| numeric | 8 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Student_ID | 0 | 1 | 6 | 108 | 0 | 50000 | 0 |
| Major_Category | 0 | 1 | 0 | 10 | 2 | 6 | 0 |
| Year_of_Study | 0 | 1 | 0 | 9 | 2 | 7 | 0 |
| Primary_Use_Case | 0 | 1 | 0 | 25 | 2 | 6 | 0 |
| Prompt_Engineering_Skill | 0 | 1 | 0 | 12 | 2 | 4 | 0 |
| Paid_Subscription | 0 | 1 | 0 | 5 | 2 | 3 | 0 |
| Institutional_Policy | 0 | 1 | 0 | 21 | 2 | 4 | 0 |
| Burnout_Risk_Level | 0 | 1 | 0 | 6 | 2 | 4 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|---|---|---|
| Pre_Semester_GPA | 2 | 1 | 3.15 | 0.48 | 1.18 | 2.83 | 3.21 | 3.52 | 12.25 |
| Weekly_GenAI_Hours | 2 | 1 | 8.43 | 8.27 | 0.00 | 2.39 | 5.80 | 11.72 | 40.00 |
| Tool_Diversity | 2 | 1 | 2.80 | 1.19 | 1.00 | 2.00 | 3.00 | 4.00 | 18.00 |
| Traditional_Study_Hours | 2 | 1 | 11.21 | 5.16 | 1.00 | 7.56 | 11.18 | 14.71 | 35.86 |
| Perceived_AI_Dependency | 2 | 1 | 3.51 | 1.82 | 1.00 | 2.00 | 3.00 | 5.00 | 10.00 |
| Anxiety_Level_During_Exams | 2 | 1 | 4.27 | 2.14 | 1.00 | 3.00 | 4.00 | 6.00 | 10.00 |
| Post_Semester_GPA | 2 | 1 | 3.35 | 0.50 | 1.00 | 3.02 | 3.42 | 3.75 | 10.39 |
| Skill_Retention_Score | 2 | 1 | 75.80 | 13.28 | 10.78 | 66.82 | 76.00 | 85.19 | 100.00 |
str(data)
## 'data.frame': 50000 obs. of 16 variables:
## $ Student_ID : chr "100001" "100002" "100003" "100004" ...
## $ Major_Category : chr "Humanities" "Medical" "Business" "Business" ...
## $ Year_of_Study : chr "Senior" "Junior" "Freshman" "Senior" ...
## $ Pre_Semester_GPA : num 2.42 3.82 3.4 3.79 3.63 ...
## $ Weekly_GenAI_Hours : num 23.31 1.12 21.26 1.82 9.29 ...
## $ Primary_Use_Case : chr "Copywriting/Drafting" "Ideation" "Summarizing_Reading" "Copywriting/Drafting" ...
## $ Prompt_Engineering_Skill : chr "Beginner" "Advanced" "Beginner" "Intermediate" ...
## $ Tool_Diversity : int 1 5 2 4 4 1 5 3 2 2 ...
## $ Paid_Subscription : chr "True" "False" "False" "False" ...
## $ Traditional_Study_Hours : num 8.13 16.65 10.35 15.23 12.55 ...
## $ Perceived_AI_Dependency : int 5 3 5 2 4 4 8 2 1 3 ...
## $ Institutional_Policy : chr "Allowed_With_Citation" "Allowed_With_Citation" "Strict_Ban" "Allowed_With_Citation" ...
## $ Anxiety_Level_During_Exams: int 6 9 9 2 4 5 7 1 5 8 ...
## $ Post_Semester_GPA : num 2.39 3.7 3.5 4 3.8 ...
## $ Skill_Retention_Score : num 86.4 69.4 73.9 63.6 100 ...
## $ Burnout_Risk_Level : chr "High" "Low" "Medium" "Medium" ...
data$Major_Category <- as.factor(data$Major_Category)
data$Year_of_Study <- as.factor(data$Year_of_Study)
data$Prompt_Engineering_Skill <- as.factor(data$Prompt_Engineering_Skill)
data$Paid_Subscription <- as.factor(data$Paid_Subscription)
data$Burnout_Risk_Level <- factor(
data$Burnout_Risk_Level,
levels = c("Low", "Medium", "High"),
ordered = TRUE
)
data$Institutional_Policy <- as.factor(data$Institutional_Policy)
str(data)
## 'data.frame': 50000 obs. of 16 variables:
## $ Student_ID : chr "100001" "100002" "100003" "100004" ...
## $ Major_Category : Factor w/ 6 levels "","Arts","Business",..: 4 5 3 3 6 6 6 2 3 3 ...
## $ Year_of_Study : Factor w/ 7 levels "","123","Freshman",..: 6 5 3 6 7 5 3 5 7 7 ...
## $ Pre_Semester_GPA : num 2.42 3.82 3.4 3.79 3.63 ...
## $ Weekly_GenAI_Hours : num 23.31 1.12 21.26 1.82 9.29 ...
## $ Primary_Use_Case : chr "Copywriting/Drafting" "Ideation" "Summarizing_Reading" "Copywriting/Drafting" ...
## $ Prompt_Engineering_Skill : Factor w/ 4 levels "","Advanced",..: 3 2 3 4 2 3 2 4 3 4 ...
## $ Tool_Diversity : int 1 5 2 4 4 1 5 3 2 2 ...
## $ Paid_Subscription : Factor w/ 3 levels "","False","True": 3 2 2 2 2 2 3 2 3 3 ...
## $ Traditional_Study_Hours : num 8.13 16.65 10.35 15.23 12.55 ...
## $ Perceived_AI_Dependency : int 5 3 5 2 4 4 8 2 1 3 ...
## $ Institutional_Policy : Factor w/ 4 levels "","Actively_Encouraged",..: 3 3 4 3 3 3 3 2 4 4 ...
## $ Anxiety_Level_During_Exams: int 6 9 9 2 4 5 7 1 5 8 ...
## $ Post_Semester_GPA : num 2.39 3.7 3.5 4 3.8 ...
## $ Skill_Retention_Score : num 86.4 69.4 73.9 63.6 100 ...
## $ Burnout_Risk_Level : Ord.factor w/ 3 levels "Low"<"Medium"<..: 3 1 2 2 2 3 2 2 2 3 ...
Berdasarkan hasil eksplorasi awal, dataset terdiri dari 50.000
observasi dan 16 variabel. Variabel pada dataset terdiri dari kombinasi
data numerik dan kategorik (factor)
Hasil eksplorasi menunjukkan bahwa seluruh variabel
memilikin_missing-2 atau secara persentase
complete_rate = 0.99996 , yang berarti terdapat 2 missing
value pada dataset. Meskipun terdapat missing value, Kondisi ini dapat
dikatakan sangat baik untuk proses pemodelan karena hanya terdapat 2
dari 50.000 nilai yang hilang.Penanganan missing value yang akan
dilakukan pada analisis ini adalah dengan penghapusan data.
Pada variabel kategorik (factor), terlihat beberapa
variabel penting seperti: - Year_of_Study -
Institutonal_Policy - Burnout_Risk_Level -
Prompt_Engineering_Skill - Paid_Subscription -
Primary_Use_Case
Variabel-variabel tersebut berpotensi
memengaruhiPost_Semester_GPA sehingga dapat digunakan
sebagai prediktor dalam proses pemodelan.
Untuk variabel numerik, diperoleh beberapa informasi penting: -
Rata-rata Post Semester GPA (Post_Semester_GPA) sebesar
3,34 dengan maksimum mencapai 10,38.Hal ini mengindikasikan adanya data
yanng inkonsisten mengingat rentang GPA seharusnya dari 0,00-4,00.
-Variabel Tool_Diversityjuga terindikasi mengandung data
yang inkonsisten karena nilai maksimumnya 18 sedangkan rentang nilainya
adalah 1-5 - Variabel Anxiety_Level_During_Exams,
Skill_Retention_Score, Perceived_AI_Dependency
dengan rentang 1-10, distribusinya cenderung tidak simetris
(skewed).
Secara umum, hasil eksplorasi awal menunjukkan bahwa dataset masih memerlukan penanganan missing value dan validasi data sebelum digunakan untuk proses analisis lanjutan dan pemodelan statistik maupun machine learning.
data_long <- data %>%
pivot_longer(
cols = c(Pre_Semester_GPA,
Post_Semester_GPA),
names_to = "Periode",
values_to = "GPA"
)
ggplot(data_long,
aes(x = Major_Category,
y = GPA,
fill = Periode)) +
geom_boxplot() +
theme_minimal()
## Warning: Removed 4 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
ggplot(data,
aes(Weekly_GenAI_Hours,
Post_Semester_GPA)) +
geom_point(alpha=0.3) +
geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
ggplot(data,
aes(Weekly_GenAI_Hours,
Skill_Retention_Score)) +
geom_point(alpha=0.3) +
geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 2 rows containing non-finite outside the scale range (`stat_smooth()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
cor(
data$Weekly_GenAI_Hours,
data$Post_Semester_GPA
)
## [1] NA
###Distribusi Burnout_risk_level per kebijakan institusi
ggplot(data,
aes(x = Institutional_Policy,
fill = Burnout_Risk_Level)) +
geom_bar() +
labs(
title = "Distribusi Burnout Risk Level per Kebijakan Institusi",
x = "Kebijakan Institusi",
y = "Jumlah Mahasiswa",
fill = "Burnout Risk Level"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
table(data$Institutional_Policy,
data$Burnout_Risk_Level)
##
## Low Medium High
## 0 0 0
## Actively_Encouraged 5079 6346 3562
## Allowed_With_Citation 8320 10892 6011
## Strict_Ban 2970 3905 2913
rata_ai <- data %>%
group_by(Year_of_Study) %>%
summarise(
Mean_AI_Hours = mean(Weekly_GenAI_Hours, na.rm = TRUE)
)
ggplot(rata_ai,
aes(x = Year_of_Study,
y = Mean_AI_Hours,
group = 1)) +
geom_line() +
geom_point(size = 3) +
labs(
title = "Rata-rata Penggunaan AI per Jenjang Studi",
x = "Year of Study",
y = "Rata-rata Jam AI per Minggu"
) +
theme_minimal()
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_line()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).
data %>%
group_by(Year_of_Study) %>%
summarise(
Jumlah = n(),
Mean = mean(Weekly_GenAI_Hours),
Median = median(Weekly_GenAI_Hours),
SD = sd(Weekly_GenAI_Hours)
)
data$Burnout_Risk_Level <- factor(
data$Burnout_Risk_Level,
levels = c("Low", "Medium", "High")
)
ggplot(data,
aes(x = Burnout_Risk_Level,
y = Perceived_AI_Dependency,
fill = Burnout_Risk_Level)) +
geom_boxplot() +
labs(
title = "Perceived AI Dependency berdasarkan Burnout Risk Level",
x = "Burnout Risk Level",
y = "Perceived AI Dependency"
) +
theme_minimal()
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
### Penanganan Missing Value Dataset mengandung sejumlah kecil missing
value. Karena proporsi missing value sangat rendah dibandingkan total
observasi, penanganan dilakukan dengan metode listwise deletion
(menghapus observasi yang mengandung missing value). Setelah proses
pembersihan data, tidak terdapat lagi nilai yang hilang pada dataset
yang digunakan untuk analisis
missing_summary <- data.frame(
Variabel = names(data),
Jumlah_Missing = colSums(is.na(data)),
Persentase_Missing = colSums(is.na(data))/nrow(data)*100
)
missing_summary
data<-data[complete.cases(data), ]
skim(data)
## Warning: There was 1 warning in `dplyr::summarize()`.
## ℹ In argument: `dplyr::across(tidyselect::any_of(variable_names),
## mangled_skimmers$funs)`.
## ℹ In group 0: .
## Caused by warning:
## ! There were 5 warnings in `dplyr::summarize()`.
## The first warning was:
## ℹ In argument: `dplyr::across(tidyselect::any_of(variable_names),
## mangled_skimmers$funs)`.
## Caused by warning in `sorted_count()`:
## ! Variable contains value(s) of "" that have been converted to "empty".
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 4 remaining warnings.
| Name | data |
| Number of rows | 49998 |
| Number of columns | 16 |
| _______________________ | |
| Column type frequency: | |
| character | 2 |
| factor | 6 |
| numeric | 8 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Student_ID | 0 | 1 | 6 | 6 | 0 | 49998 | 0 |
| Primary_Use_Case | 0 | 1 | 8 | 25 | 0 | 5 | 0 |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| Major_Category | 0 | 1 | FALSE | 5 | STE: 15059, Bus: 12537, Hum: 9994, Med: 6475 |
| Year_of_Study | 0 | 1 | FALSE | 6 | Jun: 11043, Fre: 11030, Sen: 10634, Sop: 9860 |
| Prompt_Engineering_Skill | 0 | 1 | FALSE | 3 | Beg: 18494, Int: 17696, Adv: 13808, emp: 0 |
| Paid_Subscription | 0 | 1 | FALSE | 2 | Fal: 28845, Tru: 21153, emp: 0 |
| Institutional_Policy | 0 | 1 | FALSE | 3 | All: 25223, Act: 14987, Str: 9788, emp: 0 |
| Burnout_Risk_Level | 0 | 1 | TRUE | 3 | Med: 21143, Low: 16369, Hig: 12486 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| Pre_Semester_GPA | 0 | 1 | 3.15 | 0.48 | 1.18 | 2.83 | 3.21 | 3.52 | 12.25 | ▇▅▁▁▁ |
| Weekly_GenAI_Hours | 0 | 1 | 8.43 | 8.27 | 0.00 | 2.39 | 5.80 | 11.72 | 40.00 | ▇▃▁▁▁ |
| Tool_Diversity | 0 | 1 | 2.80 | 1.19 | 1.00 | 2.00 | 3.00 | 4.00 | 18.00 | ▇▁▁▁▁ |
| Traditional_Study_Hours | 0 | 1 | 11.21 | 5.16 | 1.00 | 7.56 | 11.18 | 14.71 | 35.86 | ▅▇▃▁▁ |
| Perceived_AI_Dependency | 0 | 1 | 3.51 | 1.82 | 1.00 | 2.00 | 3.00 | 5.00 | 10.00 | ▆▇▅▁▁ |
| Anxiety_Level_During_Exams | 0 | 1 | 4.27 | 2.14 | 1.00 | 3.00 | 4.00 | 6.00 | 10.00 | ▆▇▇▃▁ |
| Post_Semester_GPA | 0 | 1 | 3.35 | 0.50 | 1.00 | 3.02 | 3.42 | 3.75 | 10.39 | ▂▇▁▁▁ |
| Skill_Retention_Score | 0 | 1 | 75.80 | 13.28 | 10.78 | 66.82 | 76.00 | 85.19 | 100.00 | ▁▁▃▇▆ |
berdasarkan hasil dari Skim, terlihat bahwan setelah dilakukan
penghapusan Nilai Hilang jumlah amatan semula 50.000 berkurang menjadi
49.998 dan dataset tidak lagi mengandung data hilang
(n_missing=0 & complete_rate=1)
###identifikasi data tidak valid
# Identifikasi data tidak valid
data %>%
filter(!(Year_of_Study %in%
c("Freshman",
"Sophomore",
"Junior",
"Senior",
"Graduate")))
# Menghapus data tidak valid
data <- data %>%
filter(Year_of_Study %in%
c("Freshman",
"Sophomore",
"Junior",
"Senior",
"Graduate"))
n_sebelum <- nrow(data)
data <- data %>%
filter(Post_Semester_GPA <= 4)
n_sesudah <- nrow(data)
cat("Jumlah data sebelum filter:", n_sebelum, "\n")
## Jumlah data sebelum filter: 49997
cat("Jumlah data sesudah filter:", n_sesudah, "\n")
## Jumlah data sesudah filter: 49996
cat("Jumlah data yang dihapus:", n_sebelum - n_sesudah)
## Jumlah data yang dihapus: 1
data %>%
filter(Tool_Diversity > 5)
data %>%
filter(Tool_Diversity <= 5)
data %>%
filter(
Pre_Semester_GPA < 0 |
Pre_Semester_GPA > 4
)
data %>%
filter(
Post_Semester_GPA < 0 |
Post_Semester_GPA > 4
)
data <-data %>%
filter(
between(Pre_Semester_GPA, 0, 4),
between(Post_Semester_GPA, 0, 4)
)
data$Student_ID <- as.character(data$Student_ID)
data$Paid_Subscription <- as.factor(
data$Paid_Subscription
)
dim(data)
## [1] 49995 16
write.csv(
data,
"AI_Student_Impact_Clean.csv",
row.names = FALSE
)
str(data, ncol=2)
## 'data.frame': 49995 obs. of 16 variables:
## $ Student_ID : chr "100001" "100002" "100003" "100004" ...
## $ Major_Category : Factor w/ 6 levels "","Arts","Business",..: 4 5 3 3 6 6 6 2 3 3 ...
## $ Year_of_Study : Factor w/ 7 levels "","123","Freshman",..: 6 5 3 6 7 5 3 5 7 7 ...
## $ Pre_Semester_GPA : num 2.42 3.82 3.4 3.79 3.63 ...
## $ Weekly_GenAI_Hours : num 23.31 1.12 21.26 1.82 9.29 ...
## $ Primary_Use_Case : chr "Copywriting/Drafting" "Ideation" "Summarizing_Reading" "Copywriting/Drafting" ...
## $ Prompt_Engineering_Skill : Factor w/ 4 levels "","Advanced",..: 3 2 3 4 2 3 2 4 3 4 ...
## $ Tool_Diversity : int 1 5 2 4 4 1 5 3 2 2 ...
## $ Paid_Subscription : Factor w/ 3 levels "","False","True": 3 2 2 2 2 2 3 2 3 3 ...
## $ Traditional_Study_Hours : num 8.13 16.65 10.35 15.23 12.55 ...
## $ Perceived_AI_Dependency : int 5 3 5 2 4 4 8 2 1 3 ...
## $ Institutional_Policy : Factor w/ 4 levels "","Actively_Encouraged",..: 3 3 4 3 3 3 3 2 4 4 ...
## $ Anxiety_Level_During_Exams: int 6 9 9 2 4 5 7 1 5 8 ...
## $ Post_Semester_GPA : num 2.39 3.7 3.5 4 3.8 ...
## $ Skill_Retention_Score : num 86.4 69.4 73.9 63.6 100 ...
## $ Burnout_Risk_Level : Ord.factor w/ 3 levels "Low"<"Medium"<..: 3 1 2 2 2 3 2 2 2 3 ...
model_gpa <- lm(
Post_Semester_GPA ~
Pre_Semester_GPA +
Weekly_GenAI_Hours +
Traditional_Study_Hours +
Perceived_AI_Dependency +
Anxiety_Level_During_Exams +
Tool_Diversity,
data = data
)
summary(model_gpa)
##
## Call:
## lm(formula = Post_Semester_GPA ~ Pre_Semester_GPA + Weekly_GenAI_Hours +
## Traditional_Study_Hours + Perceived_AI_Dependency + Anxiety_Level_During_Exams +
## Tool_Diversity, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.07992 -0.10663 0.00165 0.11146 0.75263
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1492288 0.0060232 24.776 < 2e-16 ***
## Pre_Semester_GPA 0.9601959 0.0016031 598.968 < 2e-16 ***
## Weekly_GenAI_Hours 0.0005988 0.0001258 4.760 1.94e-06 ***
## Traditional_Study_Hours 0.0137049 0.0001508 90.911 < 2e-16 ***
## Perceived_AI_Dependency -0.0009816 0.0005741 -1.710 0.0873 .
## Anxiety_Level_During_Exams -0.0025748 0.0003778 -6.815 9.56e-12 ***
## Tool_Diversity 0.0124875 0.0006451 19.356 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1716 on 49988 degrees of freedom
## Multiple R-squared: 0.8801, Adjusted R-squared: 0.8801
## F-statistic: 6.116e+04 on 6 and 49988 DF, p-value: < 2.2e-16
Berdasarkan hasil regresi linear berganda, model yang dibangun
signifikan secara statistik dengan nilai F = 61160 dan
p-value < 0,001, sehingga dapat disimpulkan bahwa
variabel Pre_Semester_GPA, Weekly_GenAI_Hours, Traditional_Study_Hours,
Perceived_AI_Dependency, Anxiety_Level_During_Exams, dan Tool_Diversity
secara simultan berpengaruh terhadap Post_Semester_GPA. Nilai
Adjusted R-squared sebesar 0,8801 menunjukkan bahwa sekitar
88,01% variasi IPK setelah semester (Post_Semester_GPA) dapat dijelaskan
oleh variabel-variabel dalam model,sedangkan sisanya sebesar 11,99%
dijelaskan oleh faktor lain di luar model. Secara parsial,
Pre_Semester_GPA memiliki pengaruh positif dan signifikan (β = 0,9602;
p < 0,001), yang menunjukkan bahwa mahasiswa dengan IPK
awal yang lebih tinggi cenderung memiliki IPK akhir yang lebih tinggi.
Traditional_Study_Hours (β = 0,0137; p < 0,001) dan
Tool_Diversity (β = 0,0125; p< 0,001) juga berpengaruh
positif signifikan terhadap IPK, yang mengindikasikan bahwa semakin
banyak waktu belajar mandiri dan semakin beragam alat AI yang digunakan,
maka prestasi akademik cenderung meningkat.
Weekly_GenAI_Hours memiliki pengaruh positif yang signifikan (β =
0,0006; p < 0,001), meskipun besarnya pengaruh relatif
kecil. Sebaliknya, Anxiety_Level_During_Exams berpengaruh negatif
signifikan (β = -0,0026; p < 0,001), yang menunjukkan
bahwa peningkatan tingkat kecemasan saat ujian cenderung menurunkan IPK
mahasiswa. Sementara itu, Perceived_AI_Dependency memiliki koefisien
negatif (β = -0,0010), namun tidak signifikan pada taraf nyata 5%
(p = 0,087), sehingga belum terdapat bukti yang cukup untuk
menyatakan bahwa persepsi ketergantungan terhadap AI berpengaruh
terhadap IPK setelah semester.