[N133]TIL 및 회고

Sea Panda·2022년 10월 26일
0

부트캠프 TIL

목록 보기
11/46

0. 학습목표

  • K-Means Clustering에 대해서 설명할 수 있다.
  • RFM개념에 대해서 설명할 수 있다.
  • Elbow method의 의미를 이해할 수 있다.

1. 주요개념

1. 지도학습과 비지도학습

1-1. 지도학습

지도학습은 머신러닝의 한 분야로, 데이터에서 반복적으로 학습하는 알고리즘을 사용하여 컴퓨터가 어디를 찾아봐야 하는 지를 명시적으로 프로그래밍하지 않고도 숨겨진 통찰력을 찾을 수 있도록 하는 데이터 분석 방법이다.

마치 교사의 도움을 받아서 알고리즘을 '정답'으로 안내하면서 학습시키는 것과 같다.

지도학습 알고리즘을 훈련하려면 입력 세트를 특정 출력과 쌍으로 구성해야 한다. 그러면 알고리즘은 입력세트 내의 패턴을 검색하여 출력과 상관 관계를 짓는다.

이 훈련 데이터를 기반으로 지도 학습 알고리즘은 보이지 않는 입력을 가져와 지정할 레이블을 결정할 수 있다. 지도학습 알고리즘의 목표는 새롭게 투입된 입력 데이터에 적합한 레이블을 예측하여 제대로 분류하고 이해하는 것이다.

크게 두가지 모델로 분류할 수 있다.

  1. 분류(Classification)
    분류 모델은 레이블이 달린 학습 데이터로 학습한 후에 새로 입력된 데이터가 학습했던 어느 그룹에 속하는 지를 찾아내는 방법이다. 따라서 분류모델의 결굇깂은 언제나 학습했던 데이터의 레이블 중 하나가 된다.
    • KNN(K Nearest Neighbor)
    • 서포트 벡터 머신(Support Vector Machine,SVM),
    • 의사결정 트리(Decision trees) 등...

  2. 예측(Prediction)
    레이블이 달린 학습 데이터를 학습하는 것은 분류와 동일하다. 하지만 예측 모델은 분류 모델과는 달리 레이블이 달린 학습 데이터를 가지고 특징(feature)과 레이블(label)사이의 상관관계를 함수식으로 표현하게 된다.
    • 회귀 모델(Regression) 등...

1-2. 비지도학습

지도학습과 달리 정답 라벨이 없는 데이터를 비슷한 특징끼리 군집화 하여 새로운 데이터에 대한 결과를 예측하는 방법을 비지도학습이라고 한다.

라벨링이 되어있지 않은 데이터로부터 패턴이나 형태를 찾아야 하기 때문에 지도학습보다는 조금 더 난이도가 있다고 할 수 있다. 실제로 지도학습에서 적절한 피처를 찾아내기 위한 전처리 방법으로 비지도 학습을 이용하기도 한다.

  1. Clustering(군집화)
    아래에서 자세히 다룬다.

  2. Dimensionality Reduction(차원 축소)
    이전글 N132를 참조하기 바람.

  3. Hidden Markov Model
    은닉마코프모델이라고 하며, 순차적인 데이터를 다루는 데 강점을 지녀 개체명 인식, 포스태킹 등 단어의 연쇄로 나타나는 언어주고 처리에 과거 많은 주목을 받았던 기법이다.

    이 모델은 마코프 체인(Markov chain)을 전제로 한 모델이다. 마코프 체인이란 마고프 성질을 지닌 이산확률과정을 가리킨다.

    각 상태가 마코프체인을 따르되 은닉되어 있다고 가정한다. 예를들어 100년 전 기후를 연구하는 학자인데, 주어진 정보는 당시 아이스크림 소비 기록뿐이라 치자. 이 정보만으로 당시 날씨가 더웠는지, 추웠는지, 따듯했는지를 알고 싶은 것이다. 아이스크림 소비기록의 연쇄를 관찰할 수 있지만, 해당 날짜의 날씨가 무엇인지는 직접적으로 관측하기 어렵다. 이처럼 관측치 뒤에 은닉되어 있는 상태를 추정하고자 한다.

  4. GAN(Generative Adversarial Network)

    GAN은 우리말로 "적대적 생성 신경망"이라고 번역된다. GAN은 실제에 가까운 이미지나 사람이 쓴 것과 같은 글 등 여러 가짜 데이터들을 생성하는 모델이다.


    이름에서 알 수 있듯이 GAN은 서로 다른 두 개의 네트워크(Generator(생성기) + Discriminator(판별기))를 적대적(adversarial)으로 학습시키며 실제 데이터와 비슷한 데이터를 생성(generative)해내는 모델이며 이렇게 생성된 데이터에 정해진 Label값이 없기 때문에 비지도 학습 기반 생성 모델로 분류된다.

2. Clustering(군집화)


Clustering은 비지도학습의 대표적인 기술로 X에 대한 레이블이 지정 되어있지 않은 데이터를 그룹핑하는 분석 알고리즘이다. 데이터들의 특성을 고려해 데이터 집단을 정의하고 데이터 집단을 대표할 수 있는 중심점을 찾는 것으로 데이터 마이닝의 한 방법이다.

여기서 Cluster는 비슷한 특성을 가진 데이터들의 집단을 의미한다. 반대로 데이터의 특성이 다르면 다른 클러스터에 속해야 한다.

위의 사진에서도 알 수 있듯이 정말 많은 군집화 방법이 존재한다. 여기서 우선적으로 K-mean Clustering에 대하여 자세히 다뤄보도록 하겠다.

2-1. K-Means Clustering

가장 대표적인 클러스터링 알고리즘 중 하나로 Centroid Based Clustering알고리즘으로도 불린다.

Centroid란 주어진 클러스터 내부에 있는 모든 점들의 중심 부분에 위치한 점을 의미한다. K-mean군집화는 Centroid라는 특이한 임의의 지점을 선택해 해당 중심점으로부터 거리가 가장 가까운 포인트를 같은 클러스터, 즉 비슷한 특성을 가진 데이터들이 모인 집단으로 묶는 방법이다.

위의 사진과 같이 비슷한 종류의 데이터를 클러스터로 묶어준다. 이때, K-means Clustering은 데이터 사이의 거리를 측정한 뒤 그 거기를 기반으로 가까운 데이터들끼리 묶어준다.

여기서 데이터 사이의 거리를 계산하는 방식을 어떤 것으로 할 것이냐에 대해서 그 값이 달라진다.

❗ 데이터 사이의 거리 계산
1. Euclidean Distance(유클리디안 거리) -> 일반적으로 가장 흔히 사용
2. Cosine Similarity
3. Jaccard Distance

❗ K-means Clustering 절차
1. 임의의 중심점 K개를 배치한다.
2. 각 데이터들을 가장 가까운 중심점으로 할당한다.
3. 군집으로 지정된 데이터들을 기반으로 해당 군집의 중심점을 업데이트 한다.
4. 2~3단계를 중심점이 수렴될 때까지 반복시행한다.

3. Elbow method

앞 서 K-means Clustering에서 Centroid 갯수를 임의로 지정한 뒤에 데이터를 군집화 하였다. 이때 임의로 지정한느 것은 데이터의 차원수와 갯수가 많아지면 사람의 육안으로 몇개의 그룹으로 군집화 해야겠다는 감을 잡기 쉽지 않다. 따라서 최대한 수학적으로 몇 개의 그룹으로 데이터를 묶어줘야 하는지를 계산해야 한다.

이때 사용하는 수학적 방식이 Elbow method이다.

Elbow method는 K-means Clustering 알고리즘의 성능을 최대한 시키는 적합한 K의 개수를 선택하는 방법을 제공한다. 그 방법은 Emphirical method로서 다양한 K값을 이용해 데이터를 군집화 한 뒤, 각 K값에 해당하는 군집 내의 데이터들이 얼마나 퍼져 있는지 응집도, 즉 inertia를 값으로 확인한다.

Inertia는 각 클러스터 별 오차의 제곱의 합(분산)을 나타낸다. 각 데이터로부터 자신이 속한 군집의 중심까지의 거리를 의미한다. 그러므로 inertia 값이 낮을수록 군집화가 더 잘 됐다고 볼 수 있다.

Python에서는 sklearn.cluter.Kmeans.inertia_를 통해서 inertia를 계산할 수 있다.

4. Data Scaling

Data Scaling은 데이터 전처리 과정의 하나이다. Data Scaling을 해주는 이유는 데이터의 값이 너무 크거나 혹은 작은 경우에 모델 알고리즘 학습과정에서 0으로 수렴하거나 무한으로 발산할 수도 있기 때문이다.

❗ 다양한 Scaling 방법
1. StandardScaler
각 Feature의 평균을 0, 분산을 1로 변경한다. 모든 특성들이 같은 스케일을 갖게 된다.

2. RobustScaler
모든 특성들이 같은 크기를 갖는다는 점에서 StandardScaler와 비슷하지만, 평균과 분산 대신에 median과 Quartile을 사용한다. RobustScaler는 이상치에 영향을 받지 않는다.

3. Min-Max Scaler
모든 Feature가 0과 1사이에 위치하게 만든다. 데이터가 2차원 set일 경우, 모든 데이터는 x축의 0~1사이에, y축의 0~1사이에 위치한다.

4. Normalizer
StandardScaler, RobustScaler, Min-MaxScaler가 각 Columns의 통계치를 이용하면 Normalize는 row마다 각각 정규화된다.
Normalizer는 유클리드 거리가 1이 되도록 데이터를 조정한다. Normalize를 하게 되면 Spherical Contour(구형 윤곽)을 갖게 되는데, 이렇게 하면 좀 더 빠르게 학습할 수 있고, 과대적합 확률을 낮출 수 있다.

5. Log Transformation

"변수가 정규분포를 하지 않아서 Log-Transformation(로그변환)을 했다."

Log Transformation는 데이터의 정규성을 높이고 분석에서 정확한 값을 얻기 위함이다. Log를 이용하면 큰 수를 같은 비율의 작은 수로 바꿔줄 수 있고, 복잡한 계산을 심플하게 만들 수 있다. Log를 취해주면 곱하기는 더하기로, 나누기는 빼기로 변환할 수 있다.

정리하자면 큰 수를 작게 만들고, 그에 더해 log의 성질을 이용하여 복잡한 계산을 단순화한다. 그리고 왜도첨도를 줄여서 데이터 분석 시 의미있는 결과를 도출한다.

5-1. 왜도(Skewness)

분포가 정규분포에 비해서 얼마나 비대칭성을 가지는지 나타내는 척도이다.

  • 양의 왜도(Positive Skewness): 정규 분포보다 오른쪽에 대칭축이 위치한다.
  • 음의 왜도(Negative Skewness): 정규 분포보다 왼쪽에 대칭축이 위치한다.

5-2. 첨도(Kurtosis)


샘플의 점수가 평균을 중심으로 가까이 몰려 있을수록 분포의 정점은 더욱 뾰족하다. 이 뾰족함이 의미하는 것이 첨도이다. 분산도가 크면 집단이 이질적이고 분포의 높이가 낮아진다. 반대로 분산도가 작으면 집단이 동질적이고 분포의 높이가 높아진다.

6. RFM

Recency(최근성) + Frequency(빈도) + Monetary(총액) = RFM

RFM은 Recency, Frequency 그리고 Monetary로 구성되어 있는 지표로서, 매출에 있어 거래의 최근성, 빈도 및 총액이 가장 중요한 Factor라고 가정하며 만든 지표이다.

이를 통하여 사용자의 특성별로 각기 다른 정책을 적용하고 서비스를 더 잘 사용하게끔 유도하는 전략을 세워볼 수 있다.

7. Heat map

열을 뜻하는 Heat와 지도를 뜻하는 Map을 결합시킨 단어로, 색상으로 표현할 수 있는 다양한 정보를 일정한 이미지 위에 열분포 형태의 비주얼한 그래픽으로 출력하는 것이 특징인 그래프이다.

히트맵은 구체적인 수치 없이도 패턴을 통해 시각화의 중심 메세지를 한눈에 전할 수 있다는 장점이 있다.

2. 명령어

1. .fit( )

fit 함수는 주어진 데이터셋에 대하여 최대,최소,평균,분산 등의 scaling에 필요한 정보를 파악하는 용도의 함수이다.

지도학습의 경우 정보를 파악하여 훈련 데이터에 모델을 맞추도록(fit) 훈련시키는 명령어이다.

비지도 학습의 경우 지도학습과는 다르게 학습(=훈련)을 의미하지 않는다. 이 경우에는 입력데이터의 형태에 맞춰 데이터를 변환하기 위한 사전 구조를 맞추는 작업을 의미한다.

사용예시

import sklearn
from sklearn.cluster import KMeans
kmeans.fit(df)

2. .transform( )

.fit() 이후 입력 데이터의 차원 변환, 클러스터랑, 피처 추출 등의 실제 작업을 수행하는 명령어이다.

3. .fit_transform( )

feature transformation에 사용하는 명령어이다. Feature transformation이란 데이터가 가지고 있는 정보는 유지하며 데이터를 변환시키는 과정이다. 다른 말로 기존의 feature들을 활용하여 새로운 feature들을 생성시키는 것이다. 이러한 변환은 머신러닝 알고리즘을 더 이해하기 쉽게 하고 더 나은 결과를 가져온다.

위의 두가지 메소드가 결합된 메소드로써 훈련 데이터의 크기, 범위를 정규화시켜준다.

이때 이 명령어는 테스트 데이터에는 사용하면 안된다는 것이다. 이는 .fit( ) 도 마찬가지이다. 즉, fit을 테스트 데이터에 사용하면 안되기 때문에 두 가지 기능을 모두 수행하는 fit_transform에서도 사용하면 안되는 것이다.

사용예시

import sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
scaler = StandardScaler()
rfm_scaled = scaler.fit_transform(log_rfm)

4. numpy.log( )

입력 어레이의 자연로그값을 반환한다.

사용예시

import numpy as np
a = np.array([1, np.e, np.e**2, 0])
print(np.log(a))

output: [ 0. 1. 2. -inf]

5. .StandardScaler( )

주어진 데이터를 표준화시켜준다.

5. KMeans( )

K-means Clustering을 진행하여 주는 명령어이다. K의 수, 최대 반복 수 등을 지정할 수 있다.

사용예시

kmeans = KMeans(n_clusters=3, max_iter=50, random_state=42)
kmeans.fit(rfm_scaled)
cluster_labels = kmeans.labels_
rfm_k3 = rfm.assign(Cluster = cluster_labels)

3. 회고

오늘은 비교적 어제보다는 쉬웠다. 하지만 오늘 배운 거를 밀어넣다 보니까 어제 뭘 배웠더라...하는 것 같다. 뭔가 복습할 시간이 부족한 것 같다. 매일 복습해야지 복습해야지 하는데, 정리하는데 한 세월이다. 그래도 오늘은 정리가 빨리 끝나서 다행이다.

내일 할 내용을 대충 스윽 봤는데 뭔가 수치해석때 배운 것이랑 비슷한 것 같아서 마음이 살짝 놓이지만 이래놓고 내일 또 무슨 일이 벌어질까 좀 무섭긴하다.

0개의 댓글