카테고리 없음

Chat GPT로 HR 데이터 분석하기(2) 회귀분석

Youngchan Jo 2023. 2. 24. 09:52

지난 분석

Chat GPT를 이용해 상관분석을 했고, 일부 코드에 에러가 있었지만 Chat GPT의 빠른 사과와 수정 코드로 훈훈하게(?) 분석을 마무리할 수 있었다.

이번에는 회귀분석을 해보도록 하겠다. 회귀분석은 변수간의 관계를 확인할 수 있는 통계 기법으로서 독립변수가 종속변수에 어떠한 영향을 주는지 파악한다. 예를 들어 '직무 만족도(독립변수)'가 '행복 점수(종속변수)'에 미치는 영향관계를 파악할 수 있다. 

 

계산은 모두 프로그램이 해주기 때문에 손쉽게 할 수 있는 회귀분석이지만 늘 '해석'을 하려고 할 때 부담스럽다. Chat GPT는 해석도 잘 해줄까? 확인해보도록 하자.

 

질문과 답변은 글상자 안에 있으며, 편의상 Chat GPT의 답변은 Blue 계열의 색상의 폰트를 썼다.

Q7을 독립변수로, Q8을 종속 변수로 다중회귀분석을 해줘
GPT가 대답했다. 다중회귀분석을 수행하기 위해서는 lm 함수를 사용합니다.
# 필요한 라이브러리를 불러옵니다
library(readxl)

# 데이터를 불러옵니다
df <- read_excel("data/raw.xlsx")

# 결측치가 있는 행을 모두 삭제합니다
df <- na.omit(df)

# Q7을 독립변수로, Q8을 종속 변수로 회귀분석을 수행합니다
fit <- lm(Q8 ~ Q7, data=df)

# 회귀분석 결과를 출력합니다
summary(fit)
lm 함수를 사용하여 Q8을 종속 변수로, Q7을 독립 변수로 회귀분석을 수행합니다. 회귀분석 결과는 summary(fit)을 통해 확인할 수 있습니다. 회귀분석 결과에서는 Estimate 열의 값이 회귀계수를 나타내며, Pr(>|t|) 열의 값이 유의확률을 나타냅니다. Q7의 회귀계수가 양수이므로, Q7이 증가할수록 Q8도 증가한다고 해석할 수 있습니다. 유의확률이 0.05보다 작으므로, Q7과 Q8 간의 상관관계는 통계적으로 유의미하다고 할 수 있습니다.

Chat GPT는 Q7이 증가할 수록 Q8이 증가한다고 했고 이 관계는 통계적으로 유의하다고 했다. 그렇다면 통계적으로 유의하다는 것은 뭘까? 물어보도록 하자.

통계적으로 유의하다는게 뭐야?
통계학에서 "통계적으로 유의하다"는 뜻은, 우연히 발생할 가능성이 매우 적다는 것을 의미합니다. 예를 들어, 유의확률이 0.05라면, 우리가 분석한 데이터에서 두 변수 간의 관계가 우연히 발생할 확률이 5% 이하라는 것을 의미합니다. 따라서, 우리는 이 관계가 통계적으로 유의하다고 결론짓을 수 있습니다.
통계적 유의성은 어떤 결과를 일반화하거나, 두 집단이 서로 다른지 여부를 판단하거나, 변수 간의 상관관계를 파악할 때 매우 중요합니다. 하지만, 통계적 유의성만으로는 인과관계를 입증할 수는 없다는 것도 기억해야 합니다. 두 변수 간의 상관관계가 있을지도 모르지만, 다른 변수가 이 관계를 설명할 수도 있기 때문입니다. 따라서, 통계적 유의성을 평가할 때는 이러한 가능성을 항상 고려해야 합니다.

훌륭하게 대답해줬다. 이제 회귀 분석의 결과를 시작화해보자.

회귀분석 결과를 시각화하고 해석해줘.
회귀분석 결과를 시각화하기 위해서는 산점도와 추세선을 그리면 됩니다. R에서는 ggplot2 패키지를 사용하여 산점도와 추세선을 그릴 수 있습니다.
# 필요한 라이브러리를 불러옵니다
library(ggplot2)
library(readxl)

# 데이터를 불러옵니다
df <- read_excel("data/raw.xlsx")

# 결측치가 있는 행을 모두 삭제합니다
df <- na.omit(df)

# 산점도와 추세선을 그립니다
ggplot(df, aes(x=Q7, y=Q8)) +
  geom_point() +
  geom_smooth(method="lm", se=FALSE)
ggplot2 패키지를 불러온 후, geom_point() 함수를 사용하여 Q7와 Q8 변수의 산점도를 그립니다. 그리고 geom_smooth() 함수를 사용하여 적합한 회귀선을 그립니다. method="lm" 옵션은 선형 회귀분석을 수행하고, se=FALSE 옵션은 표준오차 범위를 제외한 추세선을 그리도록 설정합니다.

위 그림에서 회귀선의 기울기는 0.6877이며, 절편은 -1.6142입니다. 이는 Q7의 값이 증가할수록 Q8의 값도 증가한다는 것을 의미합니다. 이 관계는 통계적으로 유의미하며, 회귀분석 결과에서 확인할 수 있는 유의확률이 0.05 이하이기 때문입니다.

따라서, Q7 변수는 Q8 변수를 예측하는 데 유용한 독립변수로 사용될 수 있습니다.

'위 그림'은 R이 연동되지 않기 때문에 제대로 보이지 않았다. Chat GPT가 R에 들어온다면? Python에 들어온다면? 바로 이미지를 확인하고 추가 분석을 손쉽게 할 수 있을 것이다. 참고로 추세선 시각화 결과는 아래와 같다.

 

 

추세선을 보고 있으니 회귀식이 궁금해졌다. 위의 코드에서 나오는 결과긴 하지만 한 번더 요청해보자.

회귀식을 보여줘
회귀식은 lm() 함수를 사용하여 구할 수 있습니다. 이를 통해 Q7를 독립변수로, Q8을 종속변수로 하는 회귀식을 구할 수 있습니다.
# 데이터를 불러옵니다
df <- read_excel("data/raw.xlsx")

# 결측치가 있는 행을 모두 삭제합니다
df <- na.omit(df)

# 회귀분석을 수행합니다
model <- lm(Q8 ~ Q7, data=df)

# 회귀식을 출력합니다
summary(model)
위 코드를 실행하면 아래와 같은 결과가 나옵니다.
Call:
lm(formula = Q8 ~ Q7, data = df)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.31547 -0.79251  0.01227  0.75820  2.93800 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.61419    0.79795  -2.023   0.0454 *  
Q7           0.68774    0.09269   7.421 6.33e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.159 on 198 degrees of freedom
Multiple R-squared:  0.2363,	Adjusted R-squared:  0.232 
F-statistic: 55.02 on 1 and 198 DF,  p-value: 6.332e-11
위 결과에서 Estimate 열의 Intercept 값이 절편을, Q7 값이 기울기를 나타냅니다. 따라서 회귀식은 다음과 같습니다.
Q8 = -1.61419 + 0.68774 * Q7
이 회귀식은 Q7가 1 증가할 때마다 Q8이 0.68774 증가한다는 것을 의미합니다.

 

내가 매번 분석먼저 물어보고 그 다음 해석을 물어보는 패턴을 보이자 Chat GPT는 알아서 회귀식을 보여주고 이에 대한 해석을 해주었다.(조금 놀랐다.)


이번 분석을 통해서 다음의 사실을 알게 되었다.

  • Chat GPT는 사용자의 질문 패턴을 학습한다.(혹은 하는 것 같다.)
  • Chat GPT는 이론에 강하다.(가치 판단이 들어가지 않는 통계이론과 지식, 해석에 대한 부분)
  • Chat GPT가 데이터 분석 프로그램에 임베딩 된다면...(우와)

다음에는 군집분석을 해보기로 한다.