본문 바로가기

Analytics/Study

실전#5 미국의 대통령은 어떻게 뽑힐까(6)

이번에는 전처리 과정으로 넘어가보자
 
앞에서 다양한 형태의 EDA와 데이터프레임 통합 과정을 거친 덕분에 전처리는 상대적으로 수월하게 진행 가능해졌다.
다루게 될 df_norm 데이터 형태부터 살펴보자

여기에서 결과에 해당되는 Pres_DEM, Pres_REP, Gov_DEM, Gov_REP는 입력에서 제외하고, 값이 NaN인 데이터들도 drop처리를 해주도록 하자

df_norm.dropna(inplace = True)
X = df_norm.drop(['Pres_DEM', 'Pres_REP', 'Gov_DEM', 'Gov_REP'], axis = 1)
y = df_norm['Pres_DEM']

 
위 컬럼에서 보듯, 해당되는 모든 변수들이 수치형 데이터이기 때문에
표준화처리도 추가작업 없이 진행해주면 된다.

from sklearn.preprocessing import StandardScaler

# StandardScaler를 이용해 수치형 데이터를 표준화하기
scaler = StandardScaler()
scaler.fit(X)
X_scaled = scaler.transform(X)
X = pd.DataFrame(data=X_scaled, index= X.index, columns = X.columns)

 
X가 모든 컬럼에 대해 표준화처리가 잘 된 것을 확인할 수 있다.
 

 
이후 train과 test 데이터 분리 역시 이전과 동일한 과정이다.

from sklearn.model_selection import train_test_split

# train_test_split() 함수로 학습 데이터와 테스트 데이터 분리하기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 1)

 
이전까지의 강의들에서는 이후 바로 모델링 과정으로 넘어갔었는데
이번 강의에서는 PCA를 통해 데이터 전처리를 추가로 진행하는 과정을 가진다.
 
우선 코드 및 결과와 함께 PCA에 대해 자세히 정리해보자

from sklearn.decomposition import PCA

# PCA를 이용해 Dimensionality Reduction 수행하기
pca = PCA()
pca.fit(X_train)
plt.plot(range(1, len(pca.explained_variance_) + 1), pca.explained_variance_)
plt.grid()

 

 
PCA(Principal Component Analysis)는 고차원 데이터를 저차원으로 축소하는 기법 중 하나로
세부 파라미터 설정값들은 아래와 같다.

  • n_components: 축소할 차원 수. 기본값은 None으로, 이 경우에는 모든 주성분을 유지한다.
  • whiten: True로 설정하면 고유벡터가 서로 직교하게 만들고 분산을 1로 만들어 특징 벡터를 흰색으로 만들어준다. 기본값은 False
  • svd_solver: SVD 알고리즘을 지정해준다. 'auto', 'full', 'arpack', 'randomized' 중 하나를 선택할 수 있으며, 기본값은 'auto'로 되어있다.
  • random_state: 난수 발생 시드 값으로, 기본값은 None

 
또한, PCA를 적용한 결과는 fit_transform 메서드를 사용하여 계산이 가능한데 이 때, 분석 대상 데이터를 입력값으로 사용하면 PCA로 변환된 데이터가 반환된다.

# 코드 예시
from sklearn.decomposition import PCA

pca = PCA(n_components=2)
reduced_data = pca.fit_transform(data)

위 코드에서 n_components를 2로 지정하여 데이터를 2차원으로 축소하고, fit_transform 메서드를 사용하여 분석 대상 데이터 data를 변환한 결과를 reduced_data에 저장한다.
추가로 PCA를 통해 구한 주성분은 components_ 속성으로 확인 가능ㅏ다. explained_variance_ratio_ 속성을 통해 각 주성분이 전체 분산에서 차지하는 비율을 확인할 수 있다.
마지막으로 PCA 결과를 시각화하기 위해서는 matplotlib 라이브러리를 사용하여 산점도를 그릴 수 있다.

## 예시
# 주성분 비율로 확인하기
components = pca.components_
explained_variance_ratio = pca.explained_variance_ratio_

# 산점도로 표현하기
import matplotlib.pyplot as plt

plt.scatter(reduced_data[:, 0], reduced_data[:, 1])
plt.show()

 
PCA를 사용하여 데이터의 차원을 축소하면서 데이터의 구조를 최대한 유지하여 적은 수의 주성분으로 구성된 새로운 데이터를 구상할 수 있다. 이를 통해 고차원 데이터를 시각화하거나 분석에 원할히 활용할 수 있게 된다.
 

다시 실제 데이터로 돌아와서 결과를 살펴보자
위 그래프의 추이를 살펴보면 5이전에 급격한 기울기 변화가 보이고, 10~15 이후부터는 완만한 형태로 바뀌어 최종적으로 0에 수렴하게 된다.

전체 데이터에 대해 최대한 데이터의 구조를 유지하되, 적은 수의 주성분으로 구성하는 것이 목적이기 때문에

적절한 지점(이 아닐수도 있는)으로 우선 판단되는 10으로 n_components를 설정하여 이후 모델링을 진행해보도록 하자.

 

pca = PCA(n_components=10)
pca.fit(X_train)


 
http://bit.ly/3Y34pE0

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.