#Thực hành với mô hình thống kê

#cài đặt các gói nội dung thư viên 
install.packages("tidyverse")

#1.Chạy các thư viện cần thiết cho dự án

library(tidyverse)
library(tidyr)
library(dplyr)
library(ggplot2)
library(readxl)
#2. Thao tác với dữ liệu
##2.1 Lấy dữ liệu từ 1 file excel

creditdata <- read_excel("creditdata.xlsx", sheet = 1)
##2.1.1 Qun sát dữ liệu

##2.1.2 Đánh giá tổng quan dữ liệu
summary(creditdata)

#3. Làm sạch dữ liệu 
##3.1 Loại bỏ các dòng dữ liệu NA bằng hàm na.omit
creditdata <- na.omit(creditdata)

##3.2 Đổi tên cho các cột trong bảng bằng cách thay thế " " bằng "_" 
names(creditdata) <- gsub(" ","_",names(creditdata))
                          
#4. Khai thác dữ liệu
##4.1 Lọc các dữ liệu về điểm tín dụng

creditdata <- creditdata%>%
                  filter(Credit_Score < 1000)

creditdata_max <- creditdata%>%
  filter(Credit_Score > 1000)


ggplot(creditdata, aes(x = Credit_Score)) +
  geom_histogram()
#5. Thống kê
##5.1 So sánh các giá trị tương ứng

ggplot(creditdata, aes(x = Home_Ownership))+
  geom_bar()
#5.2 Sự phân bổ bằng biểu đồ histogram
ggplot(creditdata, aes(x = Credit_Score)) +
  geom_histogram(color = "blue", fill = "orange") +
  labs( title = "Biểu đồ phân bổ điểm tín dụng",
        x = "Điểm tín dung",
        y = "Số lượng khách hàng")

##5.3 So sánh tương quan giữa thu nhập và điểm tín dụng
ggplot(creditdata, aes(x = Credit_Score, y = Annual_Income)) +
  geom_point(color = "pink")

##5.4 Xác định những yếu tố ngoại lệ dựa vào biểu đồ hộp
###Điểm tín dụng theo chủ sở hữu
ggplot(creditdata, aes(x = Credit_Score, y = Home_Ownership)) +
  geom_boxplot(color = "blue", fill = "orange") +
  labs( title = "Biểu đồ phân bổ loại hình sở hữu",
        x = "Điểm tín dung",
        y = "Số lượng sở hữu")

##5.5 Thống kê theo nhóm
creditdata_kinhnghiem <- creditdata%>%
  group_by(Years_in_current_job)%>%
  summarise(soluong = n(),
            thunhap_BT = mean(Annual_Income))
## So sánh độ tuổi theo số năm kinh nghiệm
ggplot(creditdata, aes(x = Years_in_current_job)) +
  geom_bar(fill = "lightgreen")


#——————————————– #Phần 2: Phân tích chuẩn đoán và dự báo dựa theo các mô hình

#Mô hình hồi quy
## Mô hình hồi quy đơn biến
##Đánh giá mối quan hệ tương quan giữa A- B( thu nhập theo niêm và thanh toán tín dụng theo tháng)
ggplot(creditdata, aes(x = Annual_Income, y = Monthly_Debt)) +
       geom_point(color = " blue") +
       geom_smooth(method = "lm", color ="yellow")

##-> Có vẻ như có mối quan hệ tuơng quan , nên đưa vào phân tích
##Xét các điều kiện để phù hợp với phân tích tương quan không : các biến phải đảm bảo phân phối chuẩn
###Cách 1: Nhìn xem phân phối của các biến dựa theo biểu đồ phân bổ histogram

ggplot(creditdata,aes(x = Annual_Income))+
  geom_histogram()

###Cách 2: Đánh giá phân phối chuẩn theo 1 số cách mở rộng

##Đánh gía phân phối chuẩn theo thu nhập theo năm
qqnorm(creditdata$Annual_Income)
qqline(creditdata$Annual_Income, col = "red")
##Đánh giá theo trả nợ hàng tháng
qqnorm(creditdata$Monthly_Debt)
qqline(creditdata$Monthly_Debt, col = "red")
### -> Đây không phải phân phối chuẩn, các nội dung phía sau khi xây dựng 

##2.1.3 Xây dựng mô hình hồi quy tuyến tính
mohinh1 <- lm(creditdata$Monthly_Debt ~ creditdata$Annual_Income)

mohinh2 <- lm(Monthly_Debt ~ Annual_Income, creditdata)



summary(mohinh1)
##Residual standard error: 10k on 7563;p-value = 2.2e-16 < 0.5 -> giá trị chưa đạt nên tìm mô hình khác

#ÁP dụng mô hình mới

##Áp dụng mô hình mới
dulieutest <- read_csv("credit_test.csv")


dulieutest <- dulieutest%>%
  na.omit(dulieutest)

names(dulieutest) <-gsub(" ", "_", names(dulieutest))


##2.5 Chạy dự báo kết quả từ mô hình

dubao_debtmonthly_annualincome <- dulieutest%>% 
  mutate(dubaogt_th = predict(mohinh2, newdata = dulieutest))


#3. Mô hình hồi quy logic
##Lưu ý: Trong dữ liệu phải có cột ở dữ liệu (0,1), TH k có cần bổ sụng, là phép chia /2 
##3.1 Bổ sung cột trạng thái
creditdata$trangthai <- creditdata$Annual_Income %% 2
creditdata$trangthai <- factor(creditdata$trangthai, levels = c(0,1), labels = c("Không vỡ nợ","Có vỡ nợ"))

## Thống kê theo Term
tk_term <- creditdata %>%
            group_by(Term) %>%
            summarise (soluong = n())

##3.2 Xây dựng mô hình 
Mohinhlogic <- glm(trangthai~Credit_Score, family = "binomial", data = creditdata)

summary(Mohinhlogic)

##3.3 Chạy mô hình dự báo với bộ dữ liệu test

Predict_datatest <- predict(Mohinhlogic, newdata = dulieutest, type ="response")


##3.4 Mô hình dự báo logic đa biến

predict_dabien <- glm(trangthai~ Credit_Score + Annual_Income + Current_Credit_Balance,
                         family = "binomial",  data = creditdata)



dubaodabien <- predict(predict_dabien, newsdata = dulieutest, type = "response")

#—————————————————- #Mô hình ARIMA

superstore <- read_excel("3.SUPERSTORE.xlsx",sheet = 1)
names(superstore) <-gsub(" ", "_", names(superstore))


#thống kế tổng doanh số theo tháng năm
baocaotg <- superstore%>%
            group_by( Thang = floor_date(Order_Date, "month"))%>%
            summarise(Sales = sum(Sales))

##Thiết lập tạo chuỗi thời gian tuần tự theo tháng cho các giá trị doanh số

Doanhso_month <- ts(baocaotg$Sales, start = c(2018,1), frequency = 12)

plot(Doanhso_month)

#——————————————– ##5.2 Xây dựng mô hình dự báo theo thời gian

##5.2 Xây dựng mô hình dự báo theo thời gian
## Cài đặt gói forecast
install.packages("forecast")

library(forecast)
## Tạo mô hình arima
mohinh_tg <- auto.arima(Doanhso_month)
summary(mohinh_tg)

##5.3 Dự báo dựa theo mô hình 
dubao_ds_6M_next <- forecast(mohinh_tg, h = 12)
plot(dubao_ds_6M_next)
  

## 6 Kmeams
##6.1 Thống kê giao dịch theo từng khách hàng
TK_gd <- superstore%>%
  group_by(Customer_ID) %>%
  summarise(
  bill = n_distinct(Order_ID),
  doanhso = sum(Sales),
  loinhuan = sum(Profit)
  )

##6.2 Biến đổi các giá trị cần phân cụm về giá trị nhị phân

TK_gd_bd <- scale(TK_gd[-1])
  

##6.3 Xây dựng mô hình Kmeams sau khi làm mịn
install.packages("factoextra")
library(factoextra)
mh_Kmeams <- kmeans(TK_gd_bd, centers = 3)
  
fviz_cluster(mh_Kmeams, data = TK_gd_bd)