혜니니의 공부방

패스트캠퍼스 강필성의비즈니스분석 30일 도전 챌린지! 29일차 본문

공부 기록/데이터분석

패스트캠퍼스 강필성의비즈니스분석 30일 도전 챌린지! 29일차

니니혜 2023. 3. 20. 20:22

23.03.20

#패스트캠퍼스 #패캠챌린지 #수강료0원챌린지 #환급챌린지 #직장인인강 #직장인자기계발#패캠인강후기 #패스트캠퍼스후기 #오공완 #강필성의비즈니스데이터분석

와 이제 슬슬 챌린지도 마무리되어갑니다~ ^ㅇ^, 환급반은 정말... 정말 열심히 하게된다. 패캠 고마와.. 


1. 선형회귀분석 - R실습

- 중고차 판매 데이터를 사용해 선형회귀분석 실습해보기, 

install.packages("moments")
library(moments)

R에서 moments 패키지는, 왜도와 첨도 계산하는 패키지,

Moments, Cumulants, Skewness, Kurtosis and Related Tests

Functions to calculate: moments, Pearson's kurtosis, Geary's kurtosis and skewness; tests related to them (Anscombe-Glynn, D'Agostino, Bonett-Seier).

perf_eval_reg <- function(tgt_y, pre_y){
  
  # RMSE
  rmse <- sqrt(mean((tgt_y - pre_y)^2))
  # MAE
  mae <- mean(abs(tgt_y - pre_y))
  # MAPE
  mape <- 100*mean(abs((tgt_y - pre_y)/tgt_y))
  
  return(c(rmse, mae, mape))
  
}

> RMSE, MAE, MAPE를 먼저 함수로 정의한다.

perf_mat <- matrix(0, nrow = 2, ncol = 3)
rownames(perf_mat) <- c("Toyota Corolla", "Boston Housing")
colnames(perf_mat) <- c("RMSE", "MAE", "MAPE")
perf_mat

> 데이터를 초기화하고, 행과 열에 해당 값을 넣는다.

 

corolla <- read.csv("ToyotaCorolla.csv")
View(corolla)

> 데이터 읽기.

 

# Indices for the inactivated input variables
id_idx <- c(1,2)

# 맨 윗행렬 제거하기.
corolla_data <- corolla[,-id_idx]

#데이터 전처리 과정
plot_data <- corolla_data[,-6]
corolla_names <- colnames(plot_data)[-1]

> 데이터 전처리과정을 거친다. 데이터 컬럼의 1번째 컬럼 빼고 가져오기, 데이터 삽입하기.

 

par(mfrow = c(5,7))
for (i in 1:length(corolla_names)){
  plot(Price ~ plot_data[,i+1], data = plot_data,
       xlab = corolla_names[i])
}
dev.off()

cc_outlier <- which(plot_data$cc > 15000)


plot_data_selected <- plot_data[-cc_outlier,c(1,2,4,5,6,9,13,14)]
corolla_names <- colnames(plot_data_selected)[-1]

par(mfrow = c(2,4))
for (i in 1:length(corolla_names)){
  plot(Price ~ plot_data_selected[,i+1], data = plot_data_selected,
       xlab = corolla_names[i])
}
dev.off()

> 해당 플롯을 오픈하면 이러한 산점도를 그릴 수 있다.

 

 

corolla_mlr_data <- corolla_data[-cc_outlier,]
nCar <- nrow(corolla_mlr_data)

set.seed(12345) 
corolla_trn_idx <- sample(1:nCar, round(0.7*nCar)) #학습용데이터 인덱스 샘플링
corolla_trn_data <- corolla_mlr_data[corolla_trn_idx,]
corolla_tst_data <- corolla_mlr_data[-corolla_trn_idx,]

# MLR 학습시키기.
mlr_corolla <- lm(Price ~ ., data = corolla_trn_data) #종속변수는 Price
mlr_corolla
summary(mlr_corolla)
plot(mlr_corolla)

# 표 결과
plot(corolla_trn_data$Price, fitted(mlr_corolla), 
     xlim = c(4000,35000), ylim = c(4000,35000))
abline(0,1,lty=3)

corolla_resid <- resid(mlr_corolla)

m <- mean(corolla_resid)
std <- sqrt(var(corolla_resid))

hist(corolla_resid, density=20, breaks=50, prob=TRUE, 
     xlab="x-variable", main="normal curve over histogram")

> 정규분포를 따른다는 것을 파악할 수 있다.

curve(dnorm(x, mean=m, sd=std), 
      col="darkblue", lwd=2, add=TRUE, yaxt="n")

skewness(corolla_resid)
kurtosis(corolla_resid)

그렇게 왜도와첨도를 구해볼 수 있음 !

 

mlr_corolla_haty <- predict(mlr_corolla, newdata = corolla_tst_data)

perf_mat[1,] <- perf_eval_reg(corolla_tst_data$Price, mlr_corolla_haty)
perf_mat

 

결과: 도요타 코롤라는 이런 값을 가진다는 것을 알 수 있습니당.


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

http://bit.ly/3Y34pE0

 

 

 

 

 

 

 

 

 

Comments