본문 바로가기
IT/Python 데이터 분석 활용

[회귀분석] 근무시간이 업무성과에 미치는 영향 분석

by Tony Jung 2025. 6. 18.
반응형

 

Python을 이용한 데이터 분석 활용중 이번 포스팅에서는 회귀분석(回歸分析, Regression Analysis)을 이용한 분석에 대해 설명하려 합니다.

회귀분석

회귀분석이란 특정 변수들 사이의 관계를 분석하여, 그 중 하나의 변수(종속변수, dependent variable )의 변화가 다른 변수들(독립변수, independent variables)의 변화와 어떤 연관성을 가지고 있는지 분석하고, 이를 토대로 종속변수의 값을 예측하거나 설명하는 통계적 방법입니다. 

이때 '회귀(回歸)'는 "되돌아가다"라는 본래의 뜻에서, 관측된 데이터들로부터 도출된 관계식이 실제 현상으로 돌아가 예측 또는 설명하는 과정을 의미합니다. 즉, 이미 주어진 데이터를 바탕으로 관계를 파악하고, 그 결과를 실제 상황에 다시 적용하여 미래의 데이터를 예측하거나 이해하는 분석 방식이라고 이해하면 됩니다.

간단한 예를 들어 광고비용(독립 변수) 이 증가할 때 매출액(종속변수)이 어떻게 변하는지 파악하는 데 사용할 수 있습니다. 

회귀분석 : 가설 

그럼 분석할 가설을 한번 세워볼까요 

가설 : 근무시간이 많은 직원들은 업무 성과 등급이 좋을 것이다. 

기본적으로 동일 수준의 업무를 진행한다면.. "근무시간이 많으면 성과가 좋을 것이다". 또는 "근무 시간이 많아질 수록 집중도는 낮아지기에 성과가 좋지 않을 것이다" 라고도 판단할 수 있을 것입니다. 이때 어떤 결론을 내리더라도 그 결론은 데이터를 근거로 도출되어야 설득력이 있을 것입니다. 

예제1 파일은  45명의 인원의 "사번", 일평균 "근무시간", 그리고 예제2 파일은 "사번"," 평가등급" 데이터를 이용하여 회귀분석을 진행하는 과정입니다. 회귀분석을 진행하기 전에 데이터에 문자가 있다면 정수로 변경해주는 과정이 필요합니다. 

평가데이터가 A+,A,A-,B,C 이렇게 있다면 5,4,3,2,1 이렇게 변경해주셔야 합니다. 물론 근무시간도 정수로 하기 위해 분으로 환산하여야 합니다. 

회귀분석 : 전체 코드 

import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns

# 엑셀 파일 로드
df_ratings= pd.read_excel(r'C:\Users\shjung\Desktop\개인\python\예제1.xlsx')
df_hours= pd.read_excel(r'C:\Users\shjung\Desktop\개인\python\예제2.xlsx')




# 두 데이터프레임을 사번 기준으로 병합
df = pd.merge(df_hours, df_ratings, on='사번', how='inner')
# 독립변수(X): 근무시간, 종속변수(y): 업무평가등급
X = df[['근무시간']]
y = df['등급']

# 상수항 추가 (회귀분석 절편 포함)
X = sm.add_constant(X)

# 회귀모형 생성 및 적합
model = sm.OLS(y, X).fit()

# 결과 출력
print(model.summary())


# 산점도 시각화 (근무시간 vs 업무평가등급)
plt.figure(figsize=(8, 6))
sns.regplot(x='근무시간', y='등급', data=df, scatter_kws={'alpha':0.6})
plt.title('근무시간과 등급 관계')
plt.xlabel('근무시간')
plt.ylabel('등급')
plt.grid(True)
plt.show()

 

반응형

 

회귀분석 : 중요 코드 설명 

독립변수 x에는 근무시간, 그리고 종속변수 y에는 등급입니다. 그리고 통계적 분석과 회귀분석을 쉽게 수행할 수 있도록 돕는 Python의 대표 라이브러리인 Statsmodels 패키지를 이용하여 상수항 추가 및 회귀모델을 생성합니다. 

# 상수항 추가 (회귀분석 절편 포함)
X = sm.add_constant(X)

여기서 절편(Intercept)이라는 말은 통계학과 수학에서 자주 등장하지만, 용어 자체가 다소 생소하게 느껴지실 것입니다.  그래프에서 직선이 y축과 만나는 지점을 뜻합니다. 즉 입력값이 0일 때 결과값은 얼마인가?를 나타내는 값입니다. 

쉽게 생각하면 택시의 기본요금이 4,000원이고 거리(km)당 1,000원이라면 이때 거리(x)가 0km일때  요금(y)는 4,000원 일것입니다. 여기서 4,000원이 절편(Intercept)이랍니다. 

회기분석을 기본 수식은 y=β0+β1x 입니다. 여기서 β₀는 절편(intercept), β₁는 기울기(Slope)입니다 . 만약 절편이 없으면 수식은 y=β1x 이런 형태로 되며 x가 0이면, y도 영이되는 원점(0,0)을 지나는 결과값이 나오게 됩니다. 현실세계에서는 x=0일때 y=0인경우가 많지 않기 때문에 절편은 반드시 필요하답니다. 

# 회귀모형 생성 및 적합
model = sm.OLS(y, X).fit()

회귀모델 생성 및 적합을 확인하는 코드입니다. Statsmodels 라이브러리의 OLS(Ordinary Least Squares, 최소제곱법)을 활용한 선형 회귀모델을 생성하는 합수입니다. y는 종속변숙, x는 독립변수이며, fit()은 회귀모형을 데이터를 사용하여 추정하고 최적의 계수를 산출하는 함수입니다. 

회귀분석 : 결과값 분석 

print(model.summary())

회귀모델의 결과값을 출력합니다.  실제 제가 가지고 있는 데이터를 기반으로 출력한 결과값은 아래와 같습니다.

 

Model Fit : 모델의 전반적인 설명력

R-squared (결정계수) 0.009 이 모델은 전체 등급 변동의 0.9%만 설명합니다. 설명력이 매우 약합니다.
Adj. R-squared (조정된 결정계수) 0.004 변수를 고려한 조정 후에도 설명력은 0.4%로 매우 낮습니다.
F-statistic (F통계량) 2.114 모델 전체의 유의성을 나타내는 지표로, 이 값만으로는 큰 의미를 두기 어렵습니다.
Prob(F-statistic) (P값) 0.147 일반적으로 유의 수준 0.05보다 커서 모델 자체가 통계적으로 유의하지 않다고 판단됩니다.

 

Coefficient Table : 변수별 회귀분석 결과 

변수  coef(계수)  std err(표준오차) t값 P-value [95% 신뢰구간] 유의성
const(상수항) 1.0533 0.394 2.671 0.008 0.277~1.830 유의
근무시간 0.0011 0.001 1.454 0.147 -0.000~0.003 비유의

상수항(Const) 계수가 약 1.05로 통계적으로 유의합니다.(P=0.008 <0.5), 이는 근무시간 0일때 예상되는 등급의 평균값입니다. 
근무시간 계수가 0.0011로, 양수이긴 하지만 매우 작습니다. P-Value가 0.147로 0.05 보다 크기 때문에 통계적으로 유의하지 않습니다.이는 근무시간은 등급에 명확한 영향을 주지 않는다로 해석할 수 있습니다

참고 : P-value는 통계적으로 가설 검정 (Statistical hypothesis testing)에 사용되는 지표로 실제로는 영향이 없는 데도 이 정도 이상의 결과가 우연히 나올 확률입니다. 통계학에서는 유의수전을 0.05(5%)로 설정합니다 .P-value가 0.05이상이면 귀설가설을 기각할 수 없고 , 즉 통계적으로 유의하지 않다고 판단합니다.

 

회귀분석 : 산점도 그래프 

# 산점도 시각화 (근무시간 vs 업무평가등급)
plt.figure(figsize=(8, 6))
sns.regplot(x='근무시간', y='등급', data=df, scatter_kws={'alpha':0.6})
plt.title('근무시간과 등급 관계')
plt.xlabel('근무시간')
plt.ylabel('등급')
plt.grid(True)
plt.show()

결과값을 시각화하기 위해 산점도(Scatter Plot)를 이용해 봤습니다. 산점도는 두 변수의 관계를 시각적으로 확인하기 위해 많이 사용되는 그래프로, 데이터를 좌표상에 점으로 나타낸 것입니다. 가로축(x축,근무시간)은 독립변수, 세로축(y축,등급)은 종속 변수 입니다. 

회귀선이 추가된 산점도의 경우 기울기가 크고 선 주위에 점들이 밀집해 있으면 관계가 뚜렷다한 것이며, 기울기가 작고 점들이 흩어져 있으면 변수간 관계가 약하거나 없다고 판단할 수 있습니다. 

결과 산점도 그래프를 확인하면 회귀선이 우상향하고 있음을 알 수 있습니다. 이는 단순히 그래프를 직관적으로만 볼 경우 "근무시간이 늘어날수록 평가 등급이 높아지는 추세"로 보입니다. 하지만 주의할 점은 회귀선의 기울기가 매우 완만하고 데이터가 넓게 펴져 있는 부분입니다.

사실 실제 회귀분석결과와 비교를 해보면 결정계수(R²)0.009 (0.9%) 로 매우 낮습니다. 이는 근무시간으로 설명할 수 있는 등급의 변동이 1%도 안된다는 의미입니다. 또한 P-value가 0.147 로 통계적으로 유의수준(일반적으로 0.05)보다 높아 근무 시간이 등급에 미치는 영향이 유의미하지 않다는 것이며, P-value가 0.147 로 통계적으로 유의수준(일반적으로 0.05)보다 높습니다.

그럼 왜 시각적 그래프와 분석결과가 다르게 보일까요? 

실제 그래프의 표시된 데이터는 매우 큰 분산을 보이기 때문에 통계적 분석 결과에서는 유의미한 관계가 나타나지 않는 것입니다. 다만 래프의 시각적 효과로 나타나는 현상이며, 데이터를 분석할 때 항상 주의 해야 할 부분입니다

만약 데이터를 분석할 때 단순 등급과 평균시간으로만 추세선을 그렸다면 "근무시간이 늘어날수록 평가 등급이 높아지는 추세" 라는 결론을 내리고 그 결론을 그래프로 증명할 것입니다. 많은 통계/분석하시는 분들이 시각적 효과만으로 자신들이 원하는 결론을 내리기 위해 자주 사용하는 방식으로 모든 데이터의 결론은 시각적그래프 + 분석결과를 같이 봐야 한답니다. 

회귀분석 : 결론 

자..그럼 가설에 대한 분석결과는... 

결과 :  근무시간과 업무 성과와는 전혀 관계가 없다 

보통은 이럴경우 독립변수의 개수를 조절합니다. 현재는 근무시간 만으로 회귀분석을 진행하였지만  출근시간, 직급,나이,연봉등 여러가지 항목 데이터가 있다면 이를추가하여 등급에 영향을 미치는 영향도를 찾을 수 있답니다. 

그나저나.. 이젠 근무시간과 업무성과가 통계학적으로 관계가 없다는 결론을 얻었으니.. 칼퇴합시다!!!

 

 

반응형

댓글