목표
제품적절성이 제품만족도에 미치는 영향 주제로 R을 이용한 단순 선형 회귀분석을 실시하고, 인공신경망을 이용한 선형 회귀분석을 python으로 실행하여 결과를 비교한다.
분석방법
SyncRNG패키지를 써서 R과 Python의 랜덤 데이터를 동일하게 맞춘다. R은 lm함수, Python은 인공신경망 경사하강법을 이용해서 모델링후 test셋으로 예측 결과를 비교한다.
데이터 정의
사용 데이터 : product.csv
264개 제품의 점수를 “제품_친밀도, 제품_적절성, 제품_만족도”의 세 항목으로 나누어 살펴볼 수 있는 데이터이다. 각 항목은 최소1에서 최대5까지의 점수 값을 포함하고 있다. 본 보고서에서는 “제품_적절성”이 “제품_만족도”에 미치는 영향을 분석해 보고자 한다. 따라서 “제품_친밀도”는 제외하고 “제품_적절성”, ”제품_만족도” 두 개 열을 이용하여 분석을 수행한다.
탐색적 데이터 분석(EDA)
데이터셋의 구조와 데이터 요약
> summary(df) 제품_친밀도 제품_적절성 제품_만족도 Min. :1.000 Min. :1.000 Min. :1.000 1st Qu.:2.000 1st Qu.:3.000 1st Qu.:3.000 Median :3.000 Median :3.000 Median :3.000 Mean :2.928 Mean :3.133 Mean :3.095 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000 Max. :5.000 Max. :5.000 Max. :5.000 |
> str(df) 'data.frame': 264 obs. of 3 variables: $ 제품_친밀도: int 3 3 4 2 2 3 4 2 3 4 ... $ 제품_적절성: int 4 3 4 2 2 3 4 2 2 2 ... $ 제품_만족도: int 3 2 4 2 2 3 4 2 3 3 ... |
히스토그램을 통해 독립변수의 분포가 정규분포와 근사하다 볼 수 있다. EDA 결과, 결측치나 이상치를 발견할 수 없었고 전처리가 필요한 변수도 없음을 확인했다.
단순 선형회귀 분석
1) 데이터 호출
library(ggplot2)
library(caret)
df<-read.csv("product.csv")
2) 모델 생성
library(SyncRNG)
v <- 1:nrow(df)
s <- SyncRNG(seed=42)
idx <- s$shuffle(v)[1:round(nrow(df)*0.7)]
idx[1:length(idx)]
train <- df[idx,]
test <- df[-idx,]
m_lm<- lm(제품_만족도~제품_적절성, train)
결과:
> m_lm
Call:
lm(formula = 제품_만족도 ~ 제품_적절성, data = train)
Coefficients:
(Intercept) 제품_적절성
0.7171 0.7607
파이썬과 R에서 동일한 데이터로 홀드아웃 교차검증을 진행하기 위해 SyncRNG 패키지를 이용하여 데이터를 분할했다. 그리고 독립변수는 적절성, 종속변수는 만족도로 한다.
> summary(m_lm)
Call:
lm(formula = 제품_만족도 ~ 제품_적절성, data = train)
Residuals:
Min 1Q Median 3Q Max
-1.75974 -0.23841 0.00092 0.24026 1.24026
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.71708 0.14118 5.079 9.29e-07 ***
제품_적절성 0.76067 0.04402 17.281 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.522 on 183 degrees of freedom
Multiple R-squared: 0.62, Adjusted R-squared: 0.618
F-statistic: 298.6 on 1 and 183 DF, p-value: < 2.2e-16
p-value<2.2e-16이므로 모델이 통계적으로 유의하고, 결정계수는 0.62이다. 회귀식은 제품_만족도=0.76067*제품_적절성 + 0.71708 이다.
3) 모델 평가(RMSE, R2)
library(Metrics)
library(caret)
p_lm<-predict(m_lm,test[,-1])
RMSE(p_lm,test[,3])
R2(p_lm,test[,3])
결과:
> RMSE(p_lm,test[,3])
0.5585512
> R2(p_lm,test[,3])
0.5023452
train셋으로 학습한 모델로 test셋을 예측한 결과 RMSE는 0.559, R2는 0.502가 나왔다.
4) 시각화
ggplot(train,aes(x=제품_적절성,y=제품_만족도))+
geom_count()+
scale_size_area(max_size = 15)+
stat_smooth(method='lm',color='red')+
geom_text(x=4.3,y=3.5,label="제품_만족도=0.76x제품_적절성+0.72")+
geom_text(x=4,y=3.3,label="R²=0.62")
제품적절성에 대한 제품만족도의 변화를 점 그래프로 시각화 하였다. 중첩되는 데이터가 많을수록 점의 크기가 커지도록 했으며 회귀선을 추가해 모델링 결과를 대략적으로 파악 할 수 있도록 했다.
▲ 점은 제품_적절성에 따른 제품_만족도의 누적 크기로 적절성이 3일때 만족도 3의 갯수가 가장 많았고,
선은 제품_만족도=0.76067*제품_적절성 + 0.71708을 설명하고 있다.
'R > 실습(project)' 카테고리의 다른 글
[R/머신러닝/실습] 랜덤포레스트를 이용한 다중 분류 분석 (0) | 2023.01.12 |
---|---|
[R/머신러닝/실습] 로지스틱 회귀 분석 (0) | 2023.01.12 |
[R/실습] ggplot2를 이용한 iris 데이터 시각화 (0) | 2023.01.03 |
[R/실습] Zelensky 대통령 연설문 모음 텍스트 분석 - 연관 분석 (0) | 2022.12.20 |
[R/실습] Zelensky 대통령 연설문 모음 텍스트 분석 - 단어 구름 생성 (1) | 2022.12.20 |
댓글