본문 바로가기

Python/▶ 머신러닝

8주차 TIL ( Clustering / 상관관계 )

728x90

Clustering


1. Clustering ( 클러스터링 : 군집화)

✅ R (Recency), F (Frequemcy), M (MonetaryValue) 

 

2. 로그함수 

✅로그(log)는 지수 함수의 역함수

✅어떤 수를 표현하기 위해 고정된 밑을 몇 번 곱하여야 하는지를 나타냄

# rfm_cluster log 변환

rfm_cluster_log = np.log(rfm_cluster + 1)
rfm_cluster_log.head(2)

💡 log 를 취할 때 왜 1을 더하고 로그를 적용할까 ?
=> x 값이 1보다 작을 때 마이너스 무한대로 수렴을 하기 때문에 가장 작은 값인 1 더하기

 

💡 np.log1p(x) = np.log(1+x) ▼

더보기

💡

 

💡음수에 로그를 적용하려면 ?

더보기

✅ Min-max scaling:
=> 데이터의 최소값을 0으로, 최대값을 1로 변환

=> 변환된 값을 다시 로그를 적용

 

절댓값으로 변환 후 로그 적용
=>절댓값으로 변환한 뒤 로그를 적용

=> 데이터의 분포가 한쪽으로 치우쳐져 있을 때 효과적

❗ 음수 값의 크기가 크게 작용하는 경우, 로그 변환 후 값의 차이가 크게 줄어듦

   => 원래 데이터의 특성이 완전히 바뀔 수 있음

적절한 상수 더한 후 로그 적용
=> 음수 값은 로그를 적용 X , 0 이상의 값은 가능

=> 따라서 음수 값에 상수를 더해준 후 로그를 적용

=> 상수는 1보다 크면서 음수 값의 절댓값보다 큰 값을 사용

이 방법은 음수 값이 상대적으로 작을 때 효과적

Box-Cox 변환
=> Box-Cox 변환은 데이터를 정규분포에 가깝게 만들기 위해 사용하는 방법

=> 양수와 음수 모두에 대해 적용

=> 데이터가 양수이거나 0일 때 적용 가능하며, 데이터가 음수인 경우에는 일반적으로 다른 방법을 사용

Box-Cox 변환은 파이썬의 scipy.stats 모듈의 boxcox 함수를 사용하여 구현할 수 있습니다.

Yeo-Johnson 변환
=> Yeo-Johnson 변환은 Box-Cox 변환과 비슷한 방법으로 음수 값을 처리

Box-Cox 변환에서는 음수 값을 처리하지 못하는데 비해 Yeo-Johnson 변환은 모든 값을 처리

 

 

3.  Feature Scaling (스케일 조정)

✅ 머신 러닝 모델에서 사용되는 특성(feature) 데이터의 스케일(scale)을 조정하는 과정

✅ 일반적으로 특성들은 서로 다른 단위나 크기를 가짐

      => 이러한 특성들을 비교하거나 모델에 적용 전, 스케일을 조정하는 것이 중요

스케일  종류 특징
StandardScaler
(=Z-score Scaling)
평균을 빼고 표준편차(std)로 나눠줌
이름을 표준편차로 외우면 좋음
평균 0, 표준편차 1
MinMaxScale 최솟값을 0, 최댓값을 1
X_scaled = (X - X.min) / (X.max - X.min)
RobustScaler 중간값 0 
X_scaled = (X - X.median) / IQR
스케일 조정은 모든 알고리즘에 적용한다고 성능 개선 X
회귀, KNN, K-means 등의 거리기반 알고리즘에 사용하면 좀 더 나은 성능

+ Z-score Scaling ▼

더보기
출처 : 갓-GPT

위 과정을 요약 ❗

1) 고객ID 기준 RFM 데이터셋 로드
2) RFM 값만 따로 분리
3) 로그를 적용해서 정규화(정규분포 형태로 변환)
4) StandardScaler 를 통해 평균이 0, 표준편차가 1이 되게 변환

용어 풀이

더보기

✅ ScikitLearn API 사용법

📝 fit() : 학습( StandardScaler 라면 주어진 데이터의 평균, 표준편차 등을 학습)
📝 transform() : 비지도학습에서 변환
📝 fit_transform() : 학습과 변환을 한번에 합니다.
📝 predict() : 지도학습의 분류, 회귀 등의 예측

 

 

✅ Kmeans

📝 데이터를 클러스터링하는 머신러닝 알고리즘 중 하나

📝 데이터를 n개의 클러스터(군집)로 군집화하는 방법을 찾는 것이 목표

출처 : 갓-GPT

+ K-Means 추가 설명

✅머신러닝 > 비지도학습 > 군집화 > K-means(알고리즘)

K-means : 군집분석 

 

✅ 주어진 샘플 데이터를 k개의 cluster로 묶는 iterative 한 알고리즘
📝 각 클러스터 내 유사도는 높이고, 클러스터 외 유사도는 낮추는 것을 가정한다.
📝거리를 측정해서 해당 군집에 속하는지를 판단. 군집 간 거리 차이의 분산을 최대화

✅그룹을 나누는 과정

📝 거리 기반의 그룹간 비유사도 (dissimilarity) 와 같은 비용 함수 (cost function) 을 최소화하는 방식

=> 이 과정에서 같은 그룹 내 데이터 오브젝트 끼리의 유사도 ▲ 다른 그룹에 있는 데이터 오브젝트와의 유사도▼

✅특정 알고리즘(특히 회귀, 군집화) 한쪽에 치우친 데이터의 경우 잘 학습하지 못함
=> cut을 사용하여 데이터를 구간화
=> 혹은 log를 사용하여 정규분포로 만들어줌

 

 

 지도학습과 비지도학습

 

📊 지도학습 / 비지도학습

  범주형 수치형
지도학습
정답 (Label) 있는 데이터를 학습
분류
범주형 데이터를 각 class별로 나누는 것
회귀
하나의 가설에 미치는 
다양한 수치형 변수들과의 인과성 분석
비지도학습
정답 (Label) 없는 데이터를 학습 
군집화
유사도가 높은 범주끼리 모아주는 것
분류와 다르게 정답 X
차원축소
고차원 데이터의 차원을 축소
분석할 특성을 줄이고 한눈에 볼 수 있음 
강화학습 당근과 채찍을 번갈아 사용하면서 모델이 스스로 정답을 찾아가도록 하는 알고리즘 

 

📊 지도학습 / 비지도학습 Chat GPT  ▼

지도학습

✅입력 데이터와 그에 상응하는 레이블(label)을 사용하여 모델을 학습시킴

✅입력 데이터와 그에 대한 출력 값을 알고 있는 상태에서 모델을 학습시킴

✅모델은 레이블 값을 예측하는 것이 목표

💡 스팸 메일 필터링을 위한 분류 모델을 만든다고 가정

이메일의 텍스트 데이터와 레이블(스팸 또는 스팸이 아님)을 사용하여 모델을 학습

=> 모델은 새로운 이메일을 입력으로 받아 스팸 여부를 예측

비지도학습

✅입력 데이터에 대한 레이블이 없는 상태에서 모델을 학습

✅ 입력 데이터 간의 패턴이나 구조를 파악하여 데이터를 분류하거나 클러스터링하는 것이 목표

💡고객들의 구매 이력을 분석하여 비슷한 소비 패턴을 가진 고객들을 클러스터링

레이블(즉, 구매 패턴이 유사한 그룹의 이름)을 미리 알수없음

=> 모델은 입력 데이터 간의 유사성을 파악하여 그룹 생성

📌지도학습은 입력 데이터와 레이블을 함께 학습하여 모델을 생성

     비지도학습은 입력 데이터만을 사용하여 데이터 간의 패턴이나 구조를 파악

 

 

 n_cluster 

📝클러스터(군집) 개수

n_clusters : int, default=8
    The number of clusters to form as well as the number of
    centroids to generate.

 

 

 random_state

📝 알고리즘 실행 시 초기 중심점 선택위해 실행하는 난수 (시드) 결정하는 매개변수

      지정하지 않을 시 매번 다른 난수로 알고리즘 실행 => 지정 권장

random_state : int, RandomState instance or None, default=None
    Determines random number generation for centroid initialization. Use
    an int to make the randomness deterministic.
    See :term:`Glossary <random_state>`.
출처 : 갓-GPT

 

 

 inertia_

📝 K-Means 알고리즘에서 찾은 클러스터링(군집화)의 품질을 나타내는 지표 중 하나

📝모든 클러스터의 중심점과 해당 클러스터에 속한 데이터 포인트 간 거리를 제곱한 값들의 합으로 계산

📝 K-Means 알고리즘은 iniertia 최소화 하는 방향으로 클러스터링(군집화) 수행 => 클러스터(군집) 개수 늘리면 됨

출처 : 갓-GPT

 

 

 Shilhouette Analysis(실루엣 분석)

📝 실루엣 분석은 각 군집 간의 거리가 얼마나 효율적으로 분리돼 있는지 표현

📝 군집화가 잘 됨 => 다른 군집과의 거리▲ 동일 군집끼리의 데이터 사이의 거리 ▼

📝 효율적으로 잘 분리 => 개별 군집은 비슷한 정도의 여유공간을 가지고 떨어져 있음

📌좋은 군집화가 되기 위한 기준 조건
ScikitLearn의  silhouette_score(실루엣 계수) 값은 0~1 사이의 값
❗ 하지만 전체 silhouette_score(실루엣 계수) 평균값과 더불어 개별 군집의 평균값의 편차가 크지 않아야 함

=> 즉, 개별 군집의 실루엣 계수 평균값이 전체 실루엣 계수의 평균값에서 크게 벗어나지 않는 것이 중요

 특정 군집의 실루엣 계수 평균값만 ▲ &  다른 군집들의 실루엣 계수 평균값▼ => 좋은 군집화 X 

 

 

 Silhouette_score (실루엣 계수)

📝 K-Means 알고리즘에서 찾은 클러스터링(군집화)의 품질을 나타내는 지표 중 하나

📝 클러스터 내의 데이터 포인트 간 거리▼ (비슷한 특성을 가진) / 클러스터 간의 거리▲ (다른 특성을 가진) 높은 값

     클러스터 내의 데이터 포인트 간 거리▲ (비슷한 특성을 가진) /  클러스터 간의 거리▼ (다른 특성을 가진) 낮은 값

📝-1에서 1 사이의 값

=> 1에 가까울수록 좋은 클러스터링 결과

=> 0에 가까울수록 그다지 좋지 않은 클러스터링 결과

=> -1에 가까울수록 클러스터링 결과가 잘못된 경우

출처 : 갓-GPT

 

 

 Elbow_method

📝 K-Means 클러스터링에서 적절한 클러스터 개수를 결정하기 위한 방법 중 하나

📝 클러스터 개수를 늘리면서 kmeans.inertia_ 값의 변화 확인

      kmeans.inertia_ 값은 클러스터 개수가 증가함에 따라 감소

출처 :&nbsp;The elbow method - Statistics for Machine Learning [Book] (oreilly.com)
출처 : 갓-GPT

 

Pycaret 

📝 scikit-learn 패키지를 기반으로 개발된 자동으로 머신러닝을 수행하는 파이썬 라이브러리 (Auto-ML)
📝 classification(분류), regression(회귀), Clustering, Anomaly Detection 등 다양한 모델을 지원

https://pycaret.gitbook.io/docs/learn-pycaret/examples

 

 

머신러닝/딥러닝에서 추상화도구(Scikit-learn, TensorFlow, PyTorch, Transformer, FastAI 등) 장점과 단점

장점
- 개발 시간 단축과 정확성 향상
- 재사용성
- 하드웨어 가속

단점
- 빠르게 실행 할 수 있는 장점있는 반면에 어떻게 동작하는지 알 수 없다. (매커니즘 이해도 부족)
- 사용법이 비교적 간단한 반면 내가 원하는 방식으로 사용하기 어렵다.
- 일부 원하는 기능이 구현되어있지 않을 수 있으며 개발자가 구성할 수 있는 옵션이 적을 수 있다.
- 메모리 사용의 증가
- 특정 프레임워크나 라이브러리에 종속될 우려가 있어 일반성이 부족할 수 있다.


상관관계

✅ Pairplot
📝그리는 이유=> scatter : 아주 많은 시간 소요
 => 샘플만 추출해서 시각화를 진행해야 조금 빠르게 시각화를 출력가능
       실,골,플이 잘 나뉘는지 시각화
📝 공식문서 Doc ▼

더보기

✅ 데이터의 각 숫자 변수가 단일 행의 Y축과 단일 열의 X축에 걸쳐 공유되도록 축 그리드를 생성
✅ 대각선 플롯은 다르게 처리
✅ 각 열에 있는 데이터의 한계 분포를 표시하기 위해 단변량 분포 플롯이 생성
✅ 변수의 하위 집합을 표시하거나 행과 열에 서로 다른 변수를 플롯할 수도 있음
✅ 몇 가지 일반적인 스타일을 쉽게 그릴 수 있도록 고안된 PairGrid의 상위 수준 인터페이스
✅ 더 많은 유연성이 필요한 경우 PairGrid를 직접 사용

📝 파라미터 ▼

더보기

seaborn.pairplot(data, *, hue=None, hue_order=None, palette=None, vars=None, x_vars=None, y_vars=None, kind='scatter', diag_kind='auto', markers=None, height=2.5, aspect=1, corner=False, dropna=False, plot_kws=None, diag_kws=None, grid_kws=None, size=None) 

 

✅ 상관관계
Q. 현실세계에서 양의 상관이 있는 것과 음의 상관이 있는것 무엇이 있을까요 ❓

더보기

- 양의 상관
교육 수준과 소득 수준.
기온과 아이스크림 판매량
회사규모와 평균연봉

- 음의 상관
체중과 운동량
강수량과 관광객 수

 

Q. 상관 계수를 볼 때 주의해야 할 점이 있다면? 어떤 점이 있을까요 ❓

더보기

✅ 상관관계 != 인과관계
✅ 상관 계수가 0이면 선형 상관관계가 없는 것. 다른 모양의 관계가 있을 수 있다. 
✅ 심슨의 역설을 주의
✅ 샘플의 크기가 작으면 결과가 왜곡될 수 있음
✅ 이상치(outliers)에 민감하다.
💡상관 계수는 이상치(outliers)에 매우 민감

=> 이상치가 있을 경우 상관 계수의 값이 크게 왜곡될 수 있음. 이상치를 먼저 확인하고 제거한 후 상관 계수를 계산

 

✅ Anscombe's quartet(앤스컴 콰르텟)

1) 시각화의 중요성
2) 특이치 및 주영향관측값(influential observation)의 영향 표현

 

 데이터 사우루스

📝 Anscombe's quartet(앤스컴 콰르텟)영향을 받아 만들어진 또 다른 데이터셋 
📝 박스플롯의 단점 설명하는 데이터셋 

https://blog.revolutionanalytics.com/2017/05/the-datasaurus-dozen.html

 

The Datasaurus Dozen

There's a reason why data scientists spend so much time exploring data using graphics. Relying only on data summaries like means, variances, and correlations can be dangerous, because wildly different data sets can give similar results. This is a principle

blog.revolutionanalytics.com

📝 raw data가 바뀌어도 boxplot의 형태가 변하지 않음 -> 단점 보완한 violin plot
📝 scatter plot은 하나하나 점을 찍어서 시간이 너무 오래 걸림 . 통계적 추정을 나타내는 box plot/violin plot

❗ 다중공선성 주의

 

 

 다중공선성(Multicollinearity)

📝 두 변수 사이에 강한 상관관계가 있는 경우에는 다중공선성이 발생

📝 이 경우에는 회귀분석 등 다른 방법을 사용하여 문제해결 필요

📊 다중공선성 Chat GPT ▼

 

 상관관계와 인과관계 

📝상관이 있는 것만으로는 인과가 있다고는 단정하지 못하고, 인과의 전제에 지나지 않음

'상관은 인과를 함축하지 않는다 (Correlation does not imply causation)'

과학이나 통계학에서 사용되는 어구.

2개의 변수의 상관이 자동적으로 한 편이 이제 한 편의 원인을 의미한다는 것은 아닌 것을 강조

(물론, 그러한 관계가 있는 경우를 완전하게 부정하는 것이 아니다)


📌정형데이터

X => 문제, 2차원, 독립변수,  feature
y=>  정답, 1차원, 종속변수, target, label

 

📌머신러닝 관련 강의 및 도서 

인프런 강의 (혼자 배우는 머신러닝)
https://www.inflearn.com/course/%ED%98%BC%EC%9E%90%EA%B3%B5%EB%B6%80-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D

 

[무료] 혼자 공부하는 머신러닝+딥러닝 - 인프런 | 강의

한빛미디어 혼공시리즈로 1:1 과외하듯이 배우는 초절정 머신러닝, 딥러닝 자습서, 수백 개의 손그림으로 이해하고 구글 코랩(Colab)을 통해 브라우저만 있으면 바로 실습 가능, - 강의 소개 | 인프

www.inflearn.com

✅ 그로스해킹

그로스 해킹 : 네이버 도서 (naver.com)

 

그로스 해킹 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

📌RickiePark(Writer & translator for ML/DL) 깃허브
https://github.com/rickiepar

 

rickiepark - Overview

Writer & translator for ML/DL, GCP Champion Innovator, Ex-ML GDE and just a humble learner. :-D - rickiepark

github.com

출처 :&nbsp;https://github.com/rickiepark

 

728x90