데이터 생존 로그

🌟 데이터 분석가가 회귀 분석으로 할 수 있는 4가지① - 예측과 요인 분석 본문

통계💡

🌟 데이터 분석가가 회귀 분석으로 할 수 있는 4가지① - 예측과 요인 분석

분석가 베어그릴스 2024. 11. 24. 18:17

 

회귀 분석의 활용법을 4가지 관점에서 정리하고,
장점과 한계점에 대해 알아봅니다.

 

처음 머신러닝을 배우면서 회귀 분석을 접했을 때는 이런 생각이 들었다.

"기초적이고 성능도 별로일 것 같은데, 실무에서 과연 쓸 일이 있을까?"

 

하지만 통계를 배우고, 실무에서 데이터를 다뤄보니 회귀 분석은 단순한 예측 모델에 그치지 않고 다양한 활용 가능성을 가진 도구라는 걸 깨달았다.

이번 포스팅에서는 회귀 분석의 활용 방법과 이를 통해 할 수 있는 네 가지 작업 중 두 가지를 먼저 정리해보았다.

 

바로 알아보자! 🚀


1. 예측: 미래를 내다보는 도구 🔮

회귀 분석의 가장 기본적인 활용은 예측이다.

데이터를 기반으로 무언가를 예측하기에 가장 기초적인 도구로 사용할 수 있다.

 

하지만 더 깊게 다루진 않으려 한다!

왜나하면, '데이터를 활용한 예측'이라는 문제를 풀기에는 회귀 분석보다 더 뛰어난 도구들이 많기 때문이다.

(가령, LGBM, XGB, Random Forest, Prophet 등)


2. 요인 분석: 무엇이 결과에 영향을 미칠까? 🧐

회귀 분석은 단순히 예측하는 것뿐 아니라, 결과에 영향을 미치는 요인을 분석하는 데 사용할 수 있는 도구이다.

 

요인 분석을 딥하게 알아보기 위해, 상황과 데이터를 가정해보자!

  • 상황: 유튜브에 재방문을 일으키는 요인은 무엇인가?
  • 데이터: 1000명의 유저 데이터를 랜덤 생성해서 활용
[패키지 import 및 데이터 랜덤 생성]
  • 1000명의 유저 데이터 생성
  • 시청 시간, 좋아요 수, 댓글 수, 공유 수, 구독 여부를 랜덤으로 생성 (독립변수)
  • 재방문 여부는 독립변수들을 기반으로 생성
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
import seaborn as sns

# Step 1: 랜덤 데이터 생성
np.random.seed(42)

# 유저 데이터 생성
n_users = 1000
data = {
    "user_id": range(1, n_users + 1),
    "watch_time": np.random.normal(30, 10, n_users),  # 시청 시간(분)
    "likes": np.random.poisson(5, n_users),          # 좋아요 수
    "comments": np.random.poisson(2, n_users),       # 댓글 수
    "shares": np.random.poisson(1, n_users),         # 공유 수
    "subscribes": np.random.binomial(1, 0.4, n_users)  # 구독 여부
}

df = pd.DataFrame(data)

# 위 변수들을 기반으로 '재방문 여부'라는 변수 랜덤 생성
logit_combination = (
    0.2 * df["watch_time"] +
    0.5 * df["likes"] +
    0.7 * df["comments"] +
    1.0 * df["shares"] +
    2.0 * df["subscribes"] +
    np.random.normal(0, 3, n_users)  # 노이즈
)

# 0 또는 1 사이로 생성
df["revisit"] = (logit_combination > logit_combination.mean()).astype(int)

df

 

 
 
[로지스틱 회귀분석 모델 생성]
  • 로지스틱 회귀분석 모델을 생성
  • 독립변수: 시청 시간, 좋아요 수, 댓글 수, 공유 수, 구독 여부
  • 종속변수: 재방문 여부
# Step 2: 로지스틱 회귀분석
# 독립변수
X_revisit = df[["watch_time", "likes", "comments", "shares", "subscribes"]]
X_revisit = sm.add_constant(X_revisit)  # Adding constant for intercept

# 종속변수
y_revisit = df["revisit"]

# 로지스틱 회귀 모델
logit_revisit_model = sm.Logit(y_revisit, X_revisit).fit()
 
 
[Odds 비 & 시각화]
  • Odds 비를 기반으로 분석 및 시각화
# Step 3: Odds 비율
logit_revisit_coefficients = pd.DataFrame({
    "Variable": logit_revisit_model.params.index,
    "Odds Ratio": np.exp(logit_revisit_model.params.values)
}).set_index("Variable")

# 시각화를 위한 sorting
sorted_coefficients = logit_revisit_coefficients.sort_values(by="Odds Ratio", ascending=False)

# 바 차트
sns.barplot(x=sorted_coefficients["Odds Ratio"], y=sorted_coefficients.index, palette="viridis")
plt.title("Factor Analysis for Revisit Impact", fontsize=16)
plt.xlabel("Odds Ratio", fontsize=12)
plt.ylabel("User Actions", fontsize=12)
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.axvline(x=1, color='red', linestyle='--', label="No Effect (Odds Ratio = 1)")
plt.legend()
plt.tight_layout()
plt.show()

logit_revisit_coefficients

logit_revisit_model.summary()

 

[Logistic Regression 결과 요약]

  • Pseudo R-squared: 0.3009로, 이 모델이 재방문 여부의 변동성 중 약 30%를 설명할 수 있다.
  • watch_time, likes, comments, shares, subscribes는 모두 p-value가 0.05보다 작아 재방문 여부에 유의미한 영향을 미친다.

 

 

[주요 변수의 Odds 비]

  • subscribes (구독): Odds Ratio가 3.79로, 구독한 사용자는 그렇지 않은 사용자보다 재방문 가능성이 약 3.8배 더 높음
  • shares (공유): Odds Ratio가 1.91로, 공유 행동이 재방문 가능성을 약 91% 증가시킴
  • comments (댓글): Odds Ratio가 1.56로, 댓글 작성은 재방문 가능성을 약 56% 증가시킴
  • likes (좋아요): Odds Ratio가 1.32로, 좋아요는 재방문 가능성을 약 32% 증가시킴
  • watch_time (시청 시간): 시청 시간이 증가할수록 재방문 가능성이 증가하지만, 상대적으로 다른 변수보다 영향력이 낮음

이번 게시글에서는 회귀 분석으로 할 수 있는 네 가지 중, 두 가지 먼저 알아보았다.

다음 게시글에서는 나머지 두 개도 마저 다뤄보도록 하겠다!

반응형
Comments