데이터 분석 기법

Hyunjun Kim·2024년 10월 2일

1. 데이터 전처리 (Preprocessing)

데이터 전처리는 분석의 정확성과 효율성을 높이기 위해 필수적인 단계입니다. 전처리 과정에서는 데이터의 품질을 개선하고 분석에 적합한 형태로 변환합니다.

1.1. 데이터 정제 (Data Cleaning)

  • 상황 예시: 설문조사 데이터를 수집했는데 일부 응답자가 응답을 생략하거나 오류가 있는 경우.
  • 기법:
    - 결측값 처리:
    - 삭제: 결측값이 많은 경우 해당 행이나 열을 삭제.
    - 대체: 평균, 중앙값, 최빈값 등으로 결측값을 대체.
    - 예시:
-- 결측값이 있는 행 삭제
SELECT * FROM survey_data WHERE response IS NOT NULL;

이상치 처리:

  • 검출: 박스 플롯, Z-점수 등을 이용하여 이상치 식별.
  • 제거 또는 수정: 이상치를 제거하거나 적절한 값으로 수정.
  • 예시:
코드 복사
# Python 예시: IQR을 이용한 이상치 제거
Q1 = df['age'].quantile(0.25)
Q3 = df['age'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['age'] < (Q1 - 1.5 * IQR)) | (df['age'] > (Q3 + 1.5 * IQR)))]

1.2. 데이터 변환 (Data Transformation)

  • 상황 예시: 머신러닝 모델을 학습시키기 위해 수치 데이터를 스케일링해야 하는 경우.
  • 기법:
    - 정규화 (Normalization): 데이터를 0과 1 사이로 스케일링.
    - 표준화 (Standardization): 데이터를 평균이 0, 표준편차가 1인 분포로 변환.
    - 인코딩 (Encoding): 범주형 데이터를 수치형으로 변환 (예: 원-핫 인코딩).
    - 예시:
# Python 예시: 원-핫 인코딩
df = pd.get_dummies(df, columns=['category_column'])

1.3. 데이터 분할 (Data Splitting)

  • 상황 예시: 모델의 성능을 평가하기 위해 데이터를 학습용과 테스트용으로 나누어야 하는 경우.
  • 기법:
    - 훈련/테스트 분할: 데이터를 학습용과 테스트용으로 분리.
    - 교차 검증 (Cross-Validation): 데이터를 여러 폴드로 나누어 모델을 반복적으로 학습 및 평가.
    - 예시:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


# 2. 데이터 분석 기법 (Data Analysis Techniques)
데이터 분석 기법은 데이터의 특성과 분석 목적에 따라 다양하게 선택됩니다. 주요 기법들을 상황별로 설명하겠습니다.

## 2.1. 상관 분석 (Correlation Analysis)
- 상황 예시: 두 변수 간의 관계를 파악하고자 할 때. 예를 들어, 광고비와 매출 간의 관계를 알고 싶은 경우.
- 기법:
	- 피어슨 상관 계수 (Pearson Correlation): 두 연속형 변수 간의 선형 관계 측정.
	- 스피어만 상관 계수 (Spearman Correlation): 두 순위형 변수 간의 관계 측정.
	- 예시:

>
```python
# Python 예시: 피어슨 상관 계수 계산
correlation = df['advertising_budget'].corr(df['sales'], method='pearson')
print(correlation)

2.2. p-value

  • 상황 예시: 특정 변수의 효과가 통계적으로 유의미한지 판단하고자 할 때. 예를 들어, 신약의 효과가 기존 약과 유의하게 다른지 검증.
  • 기법:
    - 가설 검정 (Hypothesis Testing): 귀무가설과 대립가설을 설정하고 p-value를 통해 귀무가설을 기각할지 결정.
    - 예시:
from scipy import stats
# Python 예시: t-검정을 이용한 p-value 계산
t_stat, p_value = stats.ttest_ind(group1, group2)
print(p_value)

2.3. 회귀 분석 (Regression Analysis)

상황 예시: 종속 변수와 하나 이상의 독립 변수 간의 관계를 모델링하고 예측하고자 할 때. 예를 들어, 집 가격을 예측하기 위해 면적, 방 수 등의 변수를 사용하는 경우.
기법:
선형 회귀 (Linear Regression): 연속형 종속 변수와 독립 변수 간의 선형 관계 모델링.
로지스틱 회귀 (Logistic Regression): 이진 분류 문제에 사용, 종속 변수가 범주형인 경우.
다항 회귀 (Polynomial Regression): 비선형 관계를 모델링하기 위해 독립 변수의 다항식을 사용하는 경우.
예시:
python
코드 복사
from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
2.4. 데이터 종류에 따른 분석 기법
상황 예시: 데이터의 종류(연속형, 범주형)에 따라 적합한 분석 기법을 선택해야 할 때.
기법:
연속형 데이터:
평균, 중앙값, 표준편차 등 기초 통계량 계산.
상관 분석, 회귀 분석 등.
범주형 데이터:
빈도 분석, 교차표 (Contingency Tables).
카이제곱 검정 (Chi-Square Test), 로지스틱 회귀 등.
예시:
python
코드 복사

Python 예시: 카이제곱 검정

from scipy.stats import chi2_contingency

contingency_table = pd.crosstab(df['gender'], df['purchase'])
chi2, p, dof, expected = chi2_contingency(contingency_table)
print(p)
2.5. 여러 검정법 (Various Hypothesis Testing Methods)
상황 예시: 데이터의 특성과 분석 목적에 따라 적절한 가설 검정 방법을 선택해야 할 때.
기법:
t-검정 (t-test): 두 그룹의 평균 차이를 검정.
ANOVA (Analysis of Variance): 세 그룹 이상의 평균 차이를 검정.
카이제곱 검정 (Chi-Square Test): 범주형 변수 간의 독립성 검정.
Mann-Whitney U 검정: 비모수 검정으로 두 그룹의 중앙값 차이를 검정.
예시:
python
코드 복사

Python 예시: ANOVA

from scipy.stats import f_oneway

f_stat, p_value = f_oneway(group1, group2, group3)
print(p_value)
2.6. 데이터 가공 기법 (Data Transformation Techniques)
상황 예시: 데이터 분석에 적합한 형태로 데이터를 변환해야 할 때. 예를 들어, 로그 변환을 통해 데이터의 분포를 정규화하는 경우.
기법:
스케일링 (Scaling): Min-Max 스케일링, 표준화 등.
로그 변환 (Log Transformation): 비대칭 분포를 정규 분포에 가깝게 변환.
박스-콕스 변환 (Box-Cox Transformation): 다양한 파라미터를 이용해 분포를 정규화.
예시:
python
코드 복사
from sklearn.preprocessing import StandardScaler
import numpy as np

Python 예시: 표준화

scaler = StandardScaler()
df['normalized_feature'] = scaler.fit_transform(df[['feature']])

로그 변환

df['log_feature'] = np.log(df['feature'] + 1)
2.7. 데이터 분할 (Data Splitting)
상황 예시: 모델의 과적합(overfitting)을 방지하고 성능을 평가하기 위해 데이터를 학습용과 테스트용으로 분할할 때.
기법:
훈련/테스트 분할: 데이터를 학습용(예: 80%)과 테스트용(예: 20%)으로 분할.
교차 검증 (Cross-Validation): 데이터를 여러 폴드로 나누어 반복적으로 학습 및 평가.
예시:
python
코드 복사
from sklearn.model_selection import train_test_split, cross_val_score

훈련/테스트 분할

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

K-폴드 교차 검증

scores = cross_val_score(model, X, y, cv=5)
print(scores)
2.8. 오즈비 (Odds Ratio)
상황 예시: 로지스틱 회귀 분석에서 각 독립 변수가 종속 변수에 미치는 영향을 해석할 때.
기법:
오즈비 계산: 각 독립 변수의 오즈비는 변수의 단위 변화가 종속 변수의 오즈(확률 비율)에 미치는 영향을 나타냅니다.
예시:
python
코드 복사
import statsmodels.api as sm

model = sm.Logit(y, X)
result = model.fit()
odds_ratios = np.exp(result.params)
print(odds_ratios)
2.9. K-Fold 교차 검증 (K-Fold Cross-Validation)
상황 예시: 모델의 일반화 성능을 평가하기 위해 데이터를 여러 번 학습 및 평가할 때.
기법:
K-Fold 교차 검증: 데이터를 K개의 폴드로 나누고, 각 폴드를 테스트 세트로 사용하면서 K번 학습 및 평가.
예시:
python
코드 복사
from sklearn.model_selection import KFold, cross_val_score

kf = KFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(model, X, y, cv=kf)
print(scores)
3. 상황별 데이터 분석 기법 선택 가이드
아래는 구체적인 상황 예시와 그에 맞는 데이터 분석 기법을 설명합니다.

상황 1: 고객 데이터에서 구매 패턴 분석
목표: 고객의 구매 패턴을 이해하고, 주요 구매 요인을 식별.
데이터 특성: 고객의 인구통계학적 정보, 구매 이력, 제품 카테고리 등.
적용 기법:
데이터 전처리:
결측값 처리: 고객 정보의 결측값 대체.
인코딩: 범주형 데이터(예: 성별, 지역)를 원-핫 인코딩.
스케일링: 구매 금액 등 연속형 변수 정규화.
탐색적 데이터 분석 (EDA):
상관 분석: 구매 금액과 고객 나이 간의 상관관계 파악.
모델링:
회귀 분석: 구매 금액을 예측하기 위해 선형 회귀 모델 구축.
로지스틱 회귀: 특정 제품 구매 여부를 예측하기 위해 로지스틱 회귀 모델 구축.
모델 평가:
K-Fold 교차 검증: 모델의 일반화 성능 평가.
결과 해석:
오즈비: 로지스틱 회귀에서 주요 변수의 영향력 해석.
상황 2: 제품 출시 후 매출 영향 분석
목표: 신제품 출시가 기존 제품 매출에 미치는 영향을 분석.
데이터 특성: 시간별 매출 데이터, 마케팅 활동, 경쟁사 동향 등.
적용 기법:
데이터 전처리:
시간 시리즈 정제: 날짜별 매출 데이터 정렬 및 결측값 처리.
데이터 변환: 로그 변환을 통해 매출 데이터의 분포를 정규화.
탐색적 데이터 분석 (EDA):
상관 분석: 신제품 출시 시기와 기존 제품 매출 간의 상관관계 파악.
모델링:
시계열 분석: ARIMA 모델을 사용하여 신제품 출시 전후의 매출 변동 예측.
회귀 분석: 다중 회귀 모델을 통해 마케팅 활동과 매출 간의 관계 분석.
가설 검정:
t-검정: 신제품 출시 전후의 매출 차이가 유의미한지 검정.
모델 평가:
K-Fold 교차 검증: 회귀 모델의 성능 평가.
결과 해석:
p-value: 신제품 출시가 기존 제품 매출에 유의미한 영향을 미치는지 판단.
상황 3: 의료 연구에서 치료 효과 분석
목표: 특정 치료법의 효과를 기존 치료법과 비교하여 평가.
데이터 특성: 환자의 임상 데이터, 치료 전후 건강 지표, 부작용 등.
적용 기법:
데이터 전처리:
결측값 처리: 환자 데이터의 결측값 보완.
이상치 처리: 부작용 데이터의 이상치 제거.
인코딩: 치료 방법을 범주형 변수로 인코딩.
탐색적 데이터 분석 (EDA):
상관 분석: 치료 효과와 건강 지표 간의 상관관계 파악.
가설 검정:
t-검정: 두 치료법 간의 평균 효과 차이 검정.
카이제곱 검정: 치료법과 부작용 간의 독립성 검정.
모델링:
로지스틱 회귀: 치료법이 성공적일 확률 예측.
모델 평가:
K-Fold 교차 검증: 로지스틱 회귀 모델의 성능 평가.
결과 해석:
오즈비: 각 치료법의 성공 확률 비교.
상황 4: 소셜 미디어 데이터에서 사용자 행동 분석
목표: 사용자들이 특정 게시물에 반응하는 패턴을 분석하여 콘텐츠 전략 수립.
데이터 특성: 사용자 활동 로그, 게시물 유형, 반응(좋아요, 댓글, 공유 등).
적용 기법:
데이터 전처리:
결측값 처리: 활동 로그의 결측값 보완.
인코딩: 게시물 유형을 원-핫 인코딩.
스케일링: 반응 수치를 정규화.
탐색적 데이터 분석 (EDA):
상관 분석: 게시물 유형과 반응 간의 상관관계 파악.
모델링:
회귀 분석: 반응 수를 예측하기 위해 다중 선형 회귀 모델 구축.
클러스터링: 사용자 행동을 군집화하여 유사한 사용자 그룹 식별.
모델 평가:
K-Fold 교차 검증: 회귀 모델의 성능 평가.
결과 해석:
p-value: 각 게시물 유형이 반응 수에 유의미한 영향을 미치는지 판단.
4. 주요 데이터 분석 기법 상세 설명 및 예시
4.1. 상관 분석 (Correlation Analysis)
설명: 두 변수 간의 관계 정도를 측정합니다. 상관 계수는 -1부터 1 사이의 값을 가지며, 1은 완전한 양의 상관, -1은 완전한 음의 상관, 0은 상관 관계가 없음을 의미합니다.
사용 상황: 변수 간의 관계를 파악하고, 어떤 변수가 중요한지 사전에 탐색할 때.
예시:
python
코드 복사
import pandas as pd

데이터프레임 생성

data = {'advertising_budget': [100, 200, 300, 400, 500],
'sales': [20, 40, 60, 80, 100]}
df = pd.DataFrame(data)

피어슨 상관 계수 계산

correlation = df['advertising_budget'].corr(df['sales'], method='pearson')
print(f"상관 계수: {correlation}")
4.2. p-value
설명: 가설 검정에서 귀무가설을 기각할지 여부를 판단하는 데 사용됩니다. 일반적으로 p-value가 0.05 이하이면 통계적으로 유의미하다고 간주합니다.
사용 상황: 두 변수 간의 차이가 우연에 의한 것인지 아닌지 판단할 때.
예시:
python
코드 복사
from scipy import stats

두 그룹의 데이터

group1 = [20, 21, 19, 22, 20]
group2 = [30, 29, 31, 30, 32]

t-검정 수행

t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"t-통계량: {t_stat}, p-value: {p_value}")
4.3. 회귀 분석 (Regression Analysis)
설명: 종속 변수와 하나 이상의 독립 변수 간의 관계를 모델링하여 예측하는 기법입니다.
사용 상황: 변수 간의 인과 관계를 파악하거나, 종속 변수의 값을 예측할 때.
종류:
선형 회귀 (Linear Regression): 연속형 종속 변수 예측.
로지스틱 회귀 (Logistic Regression): 이진 분류 문제.
다항 회귀 (Polynomial Regression): 비선형 관계 모델링.
예시:
python
코드 복사
from sklearn.linear_model import LinearRegression

데이터 준비

X = df[['advertising_budget']]
y = df['sales']

모델 학습

model = LinearRegression()
model.fit(X, y)

예측

predictions = model.predict(X)
print(predictions)
4.4. 데이터 종류에 따른 분석 기법 (Data Type-Specific Analysis Techniques)
설명: 데이터의 종류(연속형, 범주형)에 따라 적합한 분석 기법을 선택합니다.
연속형 데이터:
기초 통계량: 평균, 중앙값, 표준편차.
상관 분석, 회귀 분석.
범주형 데이터:
빈도 분석, 교차표 (Contingency Tables).
카이제곱 검정, 로지스틱 회귀.
예시:
python
코드 복사

범주형 데이터 분석 예시: 카이제곱 검정

from scipy.stats import chi2_contingency

교차표 생성

contingency_table = pd.crosstab(df['gender'], df['purchase'])

카이제곱 검정 수행

chi2, p, dof, expected = chi2_contingency(contingency_table)
print(f"p-value: {p}")
4.5. 여러 검정법 (Various Hypothesis Testing Methods)
설명: 데이터의 특성과 분석 목적에 따라 적절한 가설 검정 방법을 선택합니다.
주요 검정법:
t-검정 (t-test): 두 그룹의 평균 차이 검정.
ANOVA (Analysis of Variance): 세 그룹 이상의 평균 차이 검정.
카이제곱 검정 (Chi-Square Test): 범주형 변수 간의 독립성 검정.
Mann-Whitney U 검정: 두 독립 그룹의 중앙값 차이 비모수 검정.
예시:
python
코드 복사
from scipy.stats import f_oneway

세 그룹의 데이터

group1 = [20, 21, 19, 22, 20]
group2 = [30, 29, 31, 30, 32]
group3 = [25, 26, 24, 27, 25]

ANOVA 수행

f_stat, p_value = f_oneway(group1, group2, group3)
print(f"F-통계량: {f_stat}, p-value: {p_value}")
4.6. 데이터 가공 기법 (Data Transformation Techniques)
설명: 분석에 적합한 형태로 데이터를 변환하는 과정입니다. 데이터의 분포를 정규화하거나, 범주형 데이터를 수치형으로 변환하는 등의 작업을 포함합니다.
기법:
스케일링 (Scaling): Min-Max 스케일링, 표준화.
로그 변환 (Log Transformation): 비대칭 분포를 정규 분포에 가깝게 변환.
인코딩 (Encoding): 범주형 변수를 수치형으로 변환.
예시:
python
코드 복사
from sklearn.preprocessing import StandardScaler
import numpy as np

표준화

scaler = StandardScaler()
df['normalized_feature'] = scaler.fit_transform(df[['feature']])

로그 변환

df['log_feature'] = np.log(df['feature'] + 1)
4.7. 데이터 분할 (Data Splitting)
설명: 데이터를 학습용과 테스트용으로 분할하여 모델의 과적합을 방지하고 성능을 평가합니다.
기법:
훈련/테스트 분할: 일반적으로 70-80%를 학습용, 20-30%를 테스트용으로 사용.
교차 검증 (Cross-Validation): 데이터를 K개의 폴드로 나누어 반복적으로 학습 및 평가.
예시:
python
코드 복사
from sklearn.model_selection import train_test_split

훈련/테스트 분할

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4.8. 오즈비 (Odds Ratio)
설명: 로지스틱 회귀 분석에서 각 독립 변수의 오즈비는 변수의 단위 변화가 종속 변수의 오즈(확률 비율)에 미치는 영향을 나타냅니다.
사용 상황: 이진 분류 문제에서 변수의 영향력을 해석할 때.
예시:
python
코드 복사
import statsmodels.api as sm
import numpy as np

로지스틱 회귀 모델 학습

model = sm.Logit(y, sm.add_constant(X))
result = model.fit()

오즈비 계산

odds_ratios = np.exp(result.params)
print(odds_ratios)
4.9. K-Fold 교차 검증 (K-Fold Cross-Validation)
설명: 데이터를 K개의 폴드로 나누어 각 폴드를 테스트 세트로 사용하면서 모델을 K번 학습 및 평가하는 방법입니다. 모델의 일반화 성능을 보다 안정적으로 평가할 수 있습니다.
사용 상황: 모델의 과적합을 방지하고 성능을 평가할 때.
기법:
K-Fold: 데이터를 K개의 폴드로 나누어 반복적으로 학습 및 평가.
Stratified K-Fold: 분류 문제에서 각 폴드에 클래스 비율을 유지.
예시:
python
코드 복사
from sklearn.model_selection import KFold, cross_val_score

K-Fold 설정 (5폴드)

kf = KFold(n_splits=5, shuffle=True, random_state=42)

교차 검증 수행

scores = cross_val_score(model, X, y, cv=kf)
print(f"교차 검증 점수: {scores}")
5. 종합적인 예시 시나리오와 분석 기법 적용
시나리오: 전자상거래 사이트의 고객 이탈 분석
목표: 고객 이탈 여부를 예측하여 이탈 방지를 위한 전략 수립.
데이터 특성: 고객의 구매 이력, 방문 빈도, 서비스 이용 패턴, 인구통계학적 정보 등.
분석 단계 및 적용 기법:
5.1. 데이터 전처리
데이터 정제:

결측값 처리: 고객의 구매 이력 중 일부 데이터가 누락된 경우 평균이나 중앙값으로 대체.
이상치 처리: 구매 금액이 비정상적으로 높은 값 제거.
데이터 변환:

인코딩: 성별, 지역 등 범주형 변수 원-핫 인코딩.
스케일링: 방문 빈도, 구매 금액 등 연속형 변수 표준화.
데이터 분할:

훈련/테스트 분할: 데이터를 80% 학습용, 20% 테스트용으로 분할.
5.2. 탐색적 데이터 분석 (EDA)
상관 분석:

고객 이탈 여부와 각 변수 간의 상관관계 파악.
예를 들어, 구매 금액과 이탈 여부 간의 상관관계 확인.
데이터 시각화:

히스토그램, 박스 플롯 등을 이용해 변수 분포 및 이상치 탐색.
5.3. 모델링
회귀 분석:

로지스틱 회귀: 고객 이탈 여부 (이진 변수)를 예측하기 위해 로지스틱 회귀 모델 구축.
다중 회귀 분석: 여러 독립 변수를 이용해 종속 변수를 예측.
클러스터링 (추가):

K-Means 클러스터링: 유사한 고객 그룹 식별하여 맞춤형 전략 수립.
5.4. 모델 평가 및 검증
교차 검증:

K-Fold 교차 검증: 모델의 일반화 성능을 평가하기 위해 5폴드 교차 검증 수행.
오즈비 해석:

로지스틱 회귀 결과에서 주요 변수의 오즈비 해석.
예를 들어, 방문 빈도가 증가할수록 이탈 확률이 감소하는지 파악.
p-value 해석:

각 변수의 p-value를 통해 통계적으로 유의미한 변수 식별.
5.5. 결과 해석 및 전략 수립
유의미한 변수 파악:

구매 금액, 방문 빈도 등이 이탈 여부에 유의미한 영향을 미치는지 확인.
전략 수립:

이탈 확률이 높은 고객을 대상으로 맞춤형 프로모션이나 서비스 개선 전략 수립.
5.6. 연습 문제
문제 1 (중급 난이도): 고객 이탈 예측 모델 구축
목표: 주어진 고객 데이터를 이용해 로지스틱 회귀 모델을 구축하고, 주요 변수의 오즈비를 해석하세요.

데이터 구조:

customers
customer_id: 고객 ID
age: 나이
gender: 성별 (Male, Female)
purchase_amount: 구매 금액
visit_frequency: 방문 빈도
churn: 이탈 여부 (1: 이탈, 0: 유지)
예시 정답:

python
코드 복사
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import statsmodels.api as sm
import numpy as np

데이터 로드

df = pd.read_csv('customers.csv')

범주형 변수 원-핫 인코딩

df = pd.get_dummies(df, columns=['gender'], drop_first=True)

독립 변수와 종속 변수 설정

X = df[['age', 'purchase_amount', 'visit_frequency', 'gender_Male']]
y = df['churn']

데이터 분할

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

로지스틱 회귀 모델 학습

model = LogisticRegression()
model.fit(X_train, y_train)

Statsmodels를 이용한 오즈비 계산

X_train_sm = sm.add_constant(X_train)
logit_model = sm.Logit(y_train, X_train_sm)
result = logit_model.fit()
odds_ratios = np.exp(result.params)
print(odds_ratios)
문제 2 (중상급 난이도): 다중 회귀 분석을 통한 매출 예측
목표: 광고 예산과 할인율을 독립 변수로 사용하여 매출을 예측하는 다중 선형 회귀 모델을 구축하고, 모델의 유의성을 평가하세요.

데이터 구조:

sales_data
month: 월
advertising_budget: 광고 예산
discount_rate: 할인율
sales: 매출
예시 정답:

python
코드 복사
import pandas as pd
import statsmodels.api as sm
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

데이터 로드

df = pd.read_csv('sales_data.csv')

독립 변수와 종속 변수 설정

X = df[['advertising_budget', 'discount_rate']]
y = df['sales']

데이터 분할

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

선형 회귀 모델 학습

model = LinearRegression()
model.fit(X_train, y_train)

예측

predictions = model.predict(X_test)
mse = mean_squared_error(y_test, predictions)
print(f"평균 제곱 오차 (MSE): {mse}")

Statsmodels를 이용한 모델 유의성 평가

X_train_sm = sm.add_constant(X_train)
linear_model = sm.OLS(y_train, X_train_sm)
result = linear_model.fit()
print(result.summary())
문제 3 (고급 난이도): K-Fold 교차 검증을 이용한 모델 평가
목표: 주어진 데이터셋을 사용하여 K-Fold 교차 검증을 수행하고, 모델의 평균 정확도를 계산하세요.

데이터 구조:

data
feature1: 특성 1
feature2: 특성 2
target: 목표 변수 (이진 분류)
예시 정답:

python
코드 복사
import pandas as pd
from sklearn.model_selection import KFold, cross_val_score
from sklearn.linear_model import LogisticRegression

데이터 로드

df = pd.read_csv('data.csv')

독립 변수와 종속 변수 설정

X = df[['feature1', 'feature2']]
y = df['target']

로지스틱 회귀 모델

model = LogisticRegression()

K-Fold 교차 검증 (K=5)

kf = KFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(model, X, y, cv=kf, scoring='accuracy')

print(f"K-Fold 교차 검증 정확도: {scores}")
print(f"평균 정확도: {scores.mean()}")
6. 요약 및 추가 팁
6.1. 데이터 분석 기법 선택 가이드
상관 분석: 두 연속형 변수 간의 관계를 탐색할 때.
p-value: 가설 검정에서 통계적 유의성을 판단할 때.
회귀 분석: 변수 간의 관계를 모델링하고 예측할 때.
데이터 종류에 따른 분석 기법: 데이터의 특성에 맞는 적절한 분석 방법을 선택할 때.
여러 검정법: 데이터의 분포와 분석 목적에 따라 다양한 통계 검정을 수행할 때.
데이터 가공 기법: 분석에 적합한 형태로 데이터를 변환할 때.
데이터 분할: 모델의 성능을 평가하고 과적합을 방지할 때.
오즈비: 로지스틱 회귀에서 변수의 영향력을 해석할 때.
K-Fold 교차 검증: 모델의 일반화 성능을 안정적으로 평가할 때.
6.2. 추가 팁
데이터 이해: 분석을 시작하기 전에 데이터의 구조, 변수의 의미, 데이터의 출처 등을 충분히 이해하세요.
EDA(탐색적 데이터 분석): 데이터의 패턴, 분포, 이상치를 사전에 탐색하여 분석 방향을 설정하세요.
적절한 시각화 활용: 시각화 도구를 사용하여 데이터의 특성을 쉽게 파악하고, 분석 결과를 효과적으로 전달하세요.
모델 해석: 단순히 모델의 성능을 평가하는 것뿐만 아니라, 모델이 제시하는 인사이트를 해석하여 실제 비즈니스에 적용하세요.
지속적인 학습: 데이터 분석 기법은 계속 발전하고 있으므로, 최신 기법과 도구를 지속적으로 학습하세요.
데이터 분석은 문제를 정의하고, 데이터를 이해하며, 적절한 기법을 선택하여 인사이트를 도출하는 과정입니다. 위의 가이드를 참고하여 다양한 상황에 맞는 데이터 분석 기법을 효과적으로 활용하시길 바랍니다. 추가적인 질문이나 도움이 필요하면 언제든지 문의해주세요!

profile
Data Analytics Engineer 가 되

0개의 댓글