아침: 

https://map.naver.com/p/search/%EC%84%B1%EC%82%B0%EB%B4%84%EC%A3%BD%EC%B9%BC%EA%B5%AD%EC%88%98/place/1351670584?c=15.00,0,0,0,dh&placePath=%3Fentry%253Dbmp

 

네이버 지도

성산봄죽칼국수 성산점

map.naver.com

 

성산포종합여객터미널에서 우도가는 매시간마다 들어가는 배가 있음

 

점심: 짜장면, 해물짬뽕

https://map.naver.com/p/search/%EC%9A%B0%EB%8F%84%20%EB%A7%9B%EC%A7%91/place/108105804?c=14.00,0,0,0,dh&placePath=%3Fentry%253Dbmp

 

네이버 지도

우도짜장맨

map.naver.com

 

 

 

 

우도즐기는법

https://blog.naver.com/sk-bubu_traveler/223395437375

 

제주도 성산항 우도 여행 배편 배시간 타는곳 가는 법 가는 방법 스쿠터 바이크 추천 매장 후기

안녕하세요 Map찌리 부부에요 오늘은 제주도 섬 여행 중에서 아름다운 섬으로 유명한 우도에 왔어요 1. 제...

blog.naver.com

우도 스쿠터 타기 

 

저녁: 갈치

 

https://map.naver.com/p/search/%EB%A7%9B%EC%A7%91/place/1525909689?c=13.12,0,0,0,dh&placePath=%3Fentry%3Dbmp

 

네이버 지도

해송갈치 제주성산일출봉점

map.naver.com

 

 

 


점심

 

삼대국수회관본점

https://map.naver.com/p/entry/place/11727502?c=11.05,0,0,0,dh

 

네이버 지도

삼대국수회관 본점

map.naver.com

 

 

 

카페: 김녕쪼끌락카페

https://map.naver.com/p/entry/place/36399029?lng=126.7552017&lat=33.5577622&placePath=%2F&entry=plt&searchType=place&c=15.00,0,0,0,dh

 

네이버 지도

공간을 검색합니다. 생활을 연결합니다. 장소, 버스, 지하철, 도로 등 모든 공간의 정보를 하나의 검색으로 연결한 새로운 지도를 만나보세요.

map.naver.com

 

구경: 김녕해수욕장

 

 

숙소: 제주 봄 그리고 가을리조트

https://map.naver.com/p/search/%EC%A0%9C%EC%A3%BC%EB%B4%84%EA%B0%80%EC%9D%84/place/19558302?c=15.00,0,0,0,dh&placePath=%3Fentry%253Dbmp

 

네이버 지도

봄 그리고 가을리조트

map.naver.com

 

저녁: 성산포흑돈애 성산본점 

https://map.naver.com/p/entry/place/37604438?c=15.00,0,0,0,dh

 

네이버 지도

성산포흑돈애 성산본점

map.naver.com

 

  • multiprocess와 multithread의 개념, 차이, 장단점

https://velog.io/@xxhaileypark/%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9CMulti-Thread-%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4Multi-process

 

멀티 스레드(Multi Thread) & 멀티 프로세스(Multi process)

프로세스(Process)란? 프로그램 : 어떤 작업을 위해 실행할 수 있는 파일. 정적인 개념 프로세스 : 프로그램이 메모리에 올라와 cpu를 할당받고 프로그램이 실행되고 있는 상태. 동적인 개념 프로세

velog.io

 

  • python 기본 패키지 multiprocessing 사용법(multi-process)

https://velog.io/@finallazy/Python-multiprocessing-Pool

 

Python - Pool로 함수를 병렬 처리

multiprocessing 모듈을 이용하여 CPU 개수에 맞게 병렬처리를 해보자

velog.io

  • dask 사용법 

https://chealin93.tistory.com/288

 

Dask 패키지 사용 in Python

Dask는 병렬처리를 지원하는 Python Library 대규모 데이터의 분산처리 지원 Pandas와 Numpy형식을 그대로 계산지원 Delayed라는 함수 형식으로 함수를 병렬로 지원 최적화된 Dynamic task scheduling 지원 Dask Arr

chealin93.tistory.com

 

개인의견: multi-process를 쓰거나 multi-thread를 쓰는걸 선택하는 상황에서 각각 장단점이 있다. 

dask패키지 자체를 구현할때 python 기본패키지인 multiprocessing을 사용하기때문에 사용성을 높이고 속도가 좀 더 느릴 수 있다고 생각한다. 

프로세스끼리는 같은 객체를 사용할 수 없고, 프로세스 수만큼 데이터나 모델이 만들어지면서 메모리 사용이 배로 늘어나게 된다. 

shared memory를 사용하면 해결될 수 있지만 thread만큼 같은 객체를 공유하는데 빠르지 않다. 

객체를 프로세스 내에서 새로 복사하기 때문에 multi-processing이 multi-threading보다 오래걸림. 

그렇기에 한번만 선언한다면 processing이 빠름

'프로그래밍 > 병렬처리' 카테고리의 다른 글

Dask 패키지 사용 in Python  (1) 2023.11.20

Dask는 병렬처리를 지원하는 Python Library

  • 대규모 데이터의 분산처리 지원
  • Pandas와 Numpy형식을 그대로 계산지원
  • Delayed라는 함수 형식으로 함수를 병렬로 지원
  • 최적화된 Dynamic task scheduling 지원

 

Dask Array

import dask.array as da
f = h5py.File('myfile.hdf5')
x = da.from_array(f['/big-data'], chunks = (1000, 1000))

x - x.mean(axis=1).compute()

 

Dask DataFrame

import dask.dataframe as dd
df = dd.read_csv('file.csv')
df.groupby(df.user_id).value.mean().compute()

 

Dask Bag

import dask.bag as db
b = db.read_text('file.json.gz').map(json.loads)
b.pluck('name').frequencies().topk(10, lamba pair: pair[1]).compute()

 

Dask Delayed

 

from dask import delayed
L = []
for fn in filenames:
	data = delayed(load)(fn)
    L.append(delayed(process)(data))
    
result = delayed(summarize)(L)
result.compute()

'프로그래밍 > 병렬처리' 카테고리의 다른 글

multi-process vs multi-thread  (2) 2023.11.20

SCM은 인과관계 모델 구조화를 의미핟나. 

핵심은 do-operator로 Treatment에 영향을 주는 모든 요인을 이론적으로 차단하는 행위이다. 

이론적인 관점이기 때문에 계산을 따로하지 못한다. 

 

comfounder가 있어 treatment에 영향을 주어 보이는 확률이나 분포를 interventional probabilities 혹은 interventional distribution이라고 하는데 do-operator를 사용해 comfounder의 영향을 모두 제거하여 순수한 conditional probability로 만들 수 있고 이런 과정을 identification이라고 한다. 

 

  • backdoor criterion: causal association 혹은 causal relationship(X -> Y) 를 제외한 모든 backdoor path를 막는 변수들의 집합 (예를 들면, compounder는 막고, collider는 막지 않는것)
  • backdoor adjustment: 모든 변수를 condition하거나 control 하는것

 

frontdoor adjustment 

만약 comfounder가 관찰하기 어려운거라면?

 

(1) M = a + bT  (alpha)

(2) Y = beta1 + beta2M + beta3T  (beta) 

(3) chain rule 적용으로 casual effect계산

 

이론적인 structural model이 있어야 분석이 가능하고 실제 적용 사례들이 많지는 않다는게 현재 상태이다. 

The boo

https://velog.io/@ddangchani/CausalInference2

'통계분석 > 인과추론' 카테고리의 다른 글

인과추론  (3) 2023.09.18

인과관계

프레임워크가 필요하다

흄은 인과관계를 원인에 대한 필연적 결과가 아닌 이전의 경험과 아이디어로부터 결과가 연속적으로 발생한다는 관념에 불과하다라고 정의(necessary connection)
인과율 회의론 혹은 인과율 부정: 어떤게 진짜 인과관계인가?


실증주의: 검증가능한 법칙에 의해 세상이 돌아간다. => 인과관계가 필요하다.
관념적인 연결고리가 아닌 과학적인 방법으로 검증할 수 있는 수단이 필요함 => 인과관계 프레임워크의 필요성 (공통의 이해틀이 필요함)


인과관계에 대한 다양한 접근

1. theory based hypothetical causation - logical imperative
2. Statistics based approach - population에서 샘플링 한것들의 인과추론 결과가 bias 없이 - seeking unbiasedness
3. Design based -  control/ treatment 를 나누는 방식으로 인과관계 정의 - removing selection bias
4. Structure based - 얽혀있는 구조를 들어내기 - estimating causal structures


강점 단점

Statistics ~ Endogeneity? 수학적으로 계산 가능하다는 점이 강점
여러 통계 모형이 있을때 endogeneity를 얼마나 줄일 수 있는가 비교가 가능하다 (instrumental variable: 고부변수 ~ confounding variable을 상쇄시키는 변수)
데이터 분석전략에 대해 구체적인 가이드를 주지 못한다는 것이 단점

Design based approach



1-2

Potential outcomes framework

Rubin: treatment를 정의할 수 없다면 potential outcomes 을 수행할 수 없음
연구자가 적절한 디자인을 설정해야한다.  => 리서치

counterfactual은 potential outcome framework 에서 가장 중요한 개념
문제점? 동일한 사람의 개인이 treatment를 받고 안받고를 동시에 경험할 수 없는 현실적 문제가 있음
그렇기때문에 결과에 대한 정확한 정의가 필요한 counterfactual은 현실에서 얻을 수 없고 갖고 있는 데이터는 control 그룹뿐이다.

Potential outcome framework에서 가장 방해가 되는 요인은 selection bias이다. 애초에 treatment가 없는 상황에서도 treated와 untreated간의 차이가 있다면
인과추론결과를 보는데 방해가 될것이다.
Selection bias를 줄여 우리가 관측하는 observed effect와 causal effect가 같아질 수 있다.
Ceteris paribus 원칙(라틴어: 모든것이 동등하다면):  reatment가 없는 상황에서도 control과 treatment의 변수들이 평균적으로 비슷하도록 디자인 조정하는것이 중요하다. 라는 결론

1-3  
Comparable control group 찾는 사례
이전에 경제성장은 개인의 자금과 내부 발전으로 이루어진다는 endogenous growth model에 기반했지만
개발도상국과 선진국간의 차이가 좁혀지지 않음이 제도에 있다라고 보는 신제도학

예시 맥시코의 노갈래스, 에리조나의 노갈래스 쌍둥이 도시 (북한, 남한은 애초에 비교 대상이안됨)
종교, 문화, 지리적 요인이 비교가능하고 비슷한 상태
하지만 절반은 미국, 절반은 맥시코의 제도하에 있게되었고 미국이 3-4배 이상 잘산다

1995년 시카고 폭염참사
폭염이 사회적인 대응이 필요한 인식이란 개념이 없었던 시절
Causal mindset의 훌륭한 연구사례

인구커뮤니티의 성향차이로 폭염을 이겨낼 수 있었다 없었다의 인과추론 mindset을 볼 수 있음
인과추론을 가능하게 하는건 어떤 테크닉이나 통계적인 모델이 아님, 중요한건 리서치 디자인이다
비교 가능한 데이터를 수집하는 것이 중요하다는 사례

Control variable(통제변수): 탐구하기를 원치 않는 변수


같은 신장(거의 counterfactual인)을 기증해도 받는 사람의 행동을 학습한 observation learning 이론이 있다.
이 observation learning 이론을 뒷받침하는 인과추론 디자인으로 창의적인 사례였다.  


2-1.


단일 방법론 중 가장 신뢰도가 높은건 RCT
Meta analysis는 반복적인 여러 인과관계 증거를 종합하여 명확하게 추론하는 방법


2-2
샘플수가 클수록 그룹의 법칙이 이론과 가까워진다.
Random assignment~ 큰수의 법칙과 동일
Sample 수가 충분하다면 무작위배정으로 두 그룹이 평균적으로 비슷하게 구성할 수 있다.
우리가 모르는 다른 요인을 충분히 제거해야 한다. 예를 들어, 순서가 들어간 경우


Random assignment를 거의 완벽하게 수행한다면 복잡한 통계모형 없이 인과관계 추론이 가능하다는 장점이 있다.
애초에 비교가능하지 않은 대상을 가지고 비교분석을 하면 인과적추론이 어렵다. 예시) 이가탄 연구
회사에서는 A/B test가 RCT이다.

2-3. Quasi-experiment : random assignment를 할수 없어 실험과 비슷한 상황을 찾아 분석하는 것

실험연구와 달리 독립변수가 종속변수의 원인이다. 라는 결론에 도달할수는 없지만 원인들 중 하나일것이다. 라는 결론을 내릴 수 있다.
다른 변수의 영향을 무시할 수 없기 때문에

Causal inference flow chart
1. 연구목적이 인과추론인 경우인가?
2. Random assigment가 가능한가?
3. treatment가 무엇이고 control과 treatment group 구분할수있는지? => quasi experiment가 가능해지는 시점
4. 전후 데이터가 모두 있는지?

Quasi experiment의 방법 3가지: Self-selection(연구 대상자가 treatment를 받을지 말지), exogenous shock(의도하지 않은 외부 shock에 의한 구분 ~ 자연재해, 정치적 변동, 금융위기 등, natural experiment라고 부른다), discontinuity(어떤 threshold로 나눈 상황)

Exogenous shock은 DID + matching분석법, discontinuity는 RD로 분석

근데 만약? 전후 데이터가 충분하지 않으면?
treatment를 예측할 수 있지만, error항과 연관이 없는지? 그러면 instrumental variable을 이용할 수 있음

도구변수도 이용하기 어렵다면?
Selection on observables: 관찰가능한 변수들로 선택편향을 통제해보자
matching과 regression 방법론

regression같은 경우는 선형적인 관계가 있다는 가정하에 통제변수와 종속변수간의 관계를 찾아내고
matching은 sample수가 줄어들 수는 있지만 control과 treatment군을 평균적으로 비슷하게 matching하여 연구하는 것


RCT와 quasi-experiment의 차이는 control과 treatment군을 어떻게 배정하는지의 차이

우리가 주의해야하는 것: treatment 없이도 어떻게 control그룹이 treatment그룹과 유사할 수 있을까?

Exogenous shock 예시) 미국의 shale boom이 생긴 지역과 아닌 지역이 local finance에 영향이 있다, 없다
Shale이 묻혀있을지 예상하지 못한 상황에서 지역별로 경제상황이 크게 영향을 줄 것이 없다고 가정하고 분석하는 상황이다.
그렇기 때문에 Natural experiment는 RCT와 가장 유사한 효과를 내는 quasi experiment다.

Self selection 예시) sns에서의 활동이 기업을 방문하는데 영향이 있는지?
sns활동은 참가자의 자발적인 행위
두 집단이 비교 가능한지에 대해서는 natural experiment에 비해서 엄밀하게 citrus paribus를 검증할 필요가 있음

Discontinuity 예시) 음주의 영향
미국에서 19세를 기준으로 음주에 의한 사망에 영향이 있는지 등을 분석가능
어떤 threshold 값의 직전후로 treatment와 control 그룹을 나눔

2-4)
이중차분법 DID



여기서 control그룹이 counterfactual과 가깝다면 control 그룹을 통해서 countfacutal을 유추할 수 있지 않을까?

T’a - Tb = treatment를 받지 않았을때 시간에 따른 자연스러운 변화 (관찰할 수 없는 값)
Ca - Cb = treatment를 받지 않는 그룹이 treatment를 받았을때의 변화량
아래껄로 위를 대체함으로써
Counterfactual에 가까운값을 추정할 수 있지 않을까?
원래는 Ta - T’a를 추정하는데 T’a를 치환하여 분석할 수 있음
DID는 시간에 따른 변화량만! 컨트롤 그룹으로 치환한다.

시간에 따른 변화량이 일정하다: parallel trends assumption
Research design에서 선택편향을 없앨 수 있는 가정을 identification assumption이라고 부름
시간에 따른 변화량이 비슷해야한다. 평행하게 변화해야한다.

예시) Apple-nbc battle


그럼 만약 comparable control group을 찾을 수 없다면 quasi-experiment를 사용할 수 없는가? No
matching은 control과 treatment의 각 변수의 평균으로 둘으 최대한 유사하게 만들어주는 목적

1. Propensity score matching (propensity score: treatment group에 속할 확률)
⁃ 단점: 변수가 많다면 balance가 잘 안맞을 수 있다
2. Coarsened Exact Matching
⁃ 모든 변수가 같은 값인 sample들을 매칭
⁃ 동일한 구간에 속한 값들은 같다고 보고 matching

https://bigdaheta.tistory.com/62

'통계분석 > 인과추론' 카테고리의 다른 글

Structural Causal Model(SCM)  (0) 2023.10.16

VIF란?

다중공선성을 진단하기 위해 사용되는지수로
독립변수가 여러개 있을 때, 특정 독립변수를 종속변수로하고 나머지 독립변수를 독립변수로 하여 회귀분석을 수행한다. 각 회귀식의 결정계수를 계산하여 1/1-R^2값으로 VIF를 정의한다.
상관관계가 높은 독립변수는 추정된 계수가 분산이 커진다. 얼마나 커지는지 확인할 수 있는게 VIF값이고 VIF가 크다는것은 다른 변수들로 설명가능함을 나타낸다. 
 
https://direction-f.tistory.com/46

VIF(분산팽창요인), 결정계수

이전 포스팅에서 다중공선성에 대해서 다루었습니다. 그렇다면 다중공선성을 어떻게 진단을 할 수 있을까요? 완전한 다중공선성(Perfect Multicollinearity)라면, 계수가 추정이 안되거나 경고문구를

direction-f.tistory.com

http://web.vu.lt/mif/a.buteikis/wp-content/uploads/PE_Book/4-5-Multiple-collinearity.html

4.5 Multicollinearity | Practical Econometrics and Data Science

Practical Econometrics, VU MIF, 2018-2020

web.vu.lt

 
만약 데이터프레임 안에 범주형 변수가 3개이고, 수치형 변수가 3개인 경우에는 다음과 같이 GVIF 함수를 수정할 수 있습니다.

```python
def calculate_GVIF(all_vars, var):
    """
    Calculate GVIF for one categorical variable (var) and other variables (all_vars)
    """
    # Create correlation matrix (A) of the categorical variable (var)
    A = pd.get_dummies(all_vars[var], drop_first=True).corr().to_numpy()

    # Select the names of all other categorical variables
    cat_columns = [col for col in all_vars.columns if all_vars[col].dtype == 'object' and col != var]

    # Create correlation matrix (B) of other categorical variables
    B = pd.get_dummies(all_vars[cat_columns], drop_first=True).corr().to_numpy()

    # Select the numeric columns
    num_columns = [col for col in all_vars.columns if all_vars[col].dtype in ['int64', 'float64']]

    # Create correlation matrix (C) of numeric variables
    C = all_vars[num_columns].corr().to_numpy()

    # Calculate GVIF
    GVIF = (np.linalg.det(A) * np.linalg.det(B)) / np.linalg.det(C)

    return GVIF
```

이 함수는 범주형 변수에 대한 GVIF를 계산하는 함수이며, 다른 범주형 변수와 수치형 변수 간의 상호작용을 고려하여 GVIF를 계산합니다. 함수를 사용하기 전에, 데이터프레임에서 범주형 변수와 수치형 변수의 이름을 적절히 지정해주어야 합니다.

def calculate_GVIF(all_vars, var):

    """Calculate GVIF between one non-numeric variarble (var) and other variables (all_vars)"""

    # Create correlation matrix (A) of non-numeric variable (var)
    A = pd.get_dummies(all_vars[var], drop_first = True).corr().to_numpy()
    
    # Seperate non-numeric variable name (var) from other variable names
    columns = list(all_vars.columns)
    columns.remove(var)

    # Create correlation matrix (B) of other variables
    B = pd.get_dummies(all_vars[columns], drop_first = True).corr().to_numpy()

    # Create correlation matrix (C) of all variables
    C = pd.get_dummies(all_vars, drop_first = True).corr().to_numpy()

    # Calculate GVIF
    GVIF = (np.linalg.det(A)*np.linalg.det(B)) / np.linalg.det(C)

    return GVIF

'데이터분석 > 머신러닝' 카테고리의 다른 글

Multiclassification imbalance problem improvement  (0) 2023.08.02
LightGBM multiclassification code  (0) 2023.06.20
LGBM 이해  (0) 2023.06.18
엔트로피  (0) 2023.06.16
TPE 알고리즘  (0) 2023.06.12

요약

  • 산포도&상관계수확인: 산포도 확인 후 상관계수 절대값 0.8 이상 다중공선성이 있음으로 간주함
  • torelence 확인: 하나의 독립변수를 Y, 나머지 독립변수의 조합을 X로 했을때, R^2를 계산후 torelence가 0에 가까운 값인지 확인함(torelence란 1-R^2, R^2 = 1인 경우, torelence = 0, 0인경우 다중공선성 심각)
  • 분산팽창지수(VIF:Variance Inflation Factor, VIF = 1/torelence): 일반적으로 연속형변수에서 10이상이면 다중공선성 있음으로 간주, 더미변수는 3이상이면 다중공선성으로 간주함.
  • 상태지수(Condition Index): 100 이상인 경우, 다중공선성 간주하지만 잘 사용되지 않음.

 

다중공선성 문제 해결하기

  • 다중공선성이 큰 변수가 유의미한가? R^2값이 매우 팽창하였음에도 불구하고 유의미하다는 것은 그 자체로 매우 유의미함을 의미함 => 일반적으로 제거하지 않음
  • 해당변수를 제거? 데이터입력시 변수를 잘못 구성함. 무작정 제거하지 않음
  • 주성분분석으로 변수를 재조합
  • 다중공선성이 발생한 변수를 합침:다중공선성이 높은 변수들은 비슷함을 의미하여 평균값으로 대체하기도 함

 

선형회귀분석 (statsmodels.OLS regression) result로 다중공선성 확인하기

import statsmodels.api as sm

lm = sm.OLS(train_y, train_x)
result = lm.fit()
print(result.summary())

OLS 결과

 

 

Reference

https://ysyblog.tistory.com/171

 

[회귀분석] 다중회귀분석(3) - 다중공선성(다중공선성 검정 및 해결)

다중회귀식의 분산 - 회귀분석은 여러개의 독립변수를 통해 종속변수 y의 분산을 얼마나 설명하느냐의 문제 - R-square값과 관계가 있음 ysyblog.tistory.com/168?category=1185073 [회귀분석] 단순선형회귀분

ysyblog.tistory.com

https://ysyblog.tistory.com/119

 

[회귀분석] 회귀분석 실습(1) - OLS 회귀분석 결과 해석 및 범주형 변수 처리 (Statsmodel)

Statsmodel을 활용한 회귀분석 statsmodels 패키지에서는 OLS 클래스를 사용하여 선형 회귀분석을 실시한다 독립변수와 종속변수가 모두 포함된 데이터프레임이 생성되며, 상수항 결합은 하지 않아도

ysyblog.tistory.com

https://bkshin.tistory.com/entry/DATA-20-%EB%8B%A4%EC%A4%91%EA%B3%B5%EC%84%A0%EC%84%B1%EA%B3%BC-VIF

 

DATA - 20. 다중공선성(Multicollinearity)과 VIF(Variance Inflation Factors)

이번 시간에는 다중공선성과 VIF에 대해 알아보겠습니다. 독립 변수 X는 종속 변수 Y 하고만 상관 관계가 있어야 하며, 독립 변수끼리 상관 관계가 있어서는 안 됩니다. 독립 변수간 상관 관계를

bkshin.tistory.com

 

다중분류의 경우 불균형문제를 해결하기 위해 아래와같은 처리를 시도할 수 있다.

 

  • Under Sampling 
  • Simple Over Sampling 
  • Algorithm Over Sampling | 알고리즘을 통한 오버샘플링(SMOTE, ADASYN)
  • Cost-sensitive learning

python에서 imblearn이라는 패키지에서 sampling function들을 사용할 예정이다.

 

 

# 필요 모듈 임포트
import imblearn
print(imblearn.__version__)

import pandas as pd
from collections import Counter
from matplotlib import pyplot


# 필요 함수 정의
def count_and_plot(y): 
    counter = Counter(y)
    for k,v in counter.items():
        print('Class=%d, n=%d (%.3f%%)' % (k, v, v / len(y) * 100))
    pyplot.bar(counter.keys(), counter.values())
    pyplot.show()

 

클래스에 하나도 존재하지 않는 경우도 있을 것이고 예측하려는 타켓의 수는 모두 다를 것이다. 

 

Under sampling은 가장 작은 class의 개수에 맞춰 샘플개수가 줄어들 것이고, Over는 가장큰 수에 맞춰 증가할 것이다. 

Under sampling은 잠재적 정보량이 많은 데이터를 지울 수 있는 문제가 있다. RandomUnderSampler는 Undersampler의 한 방법이고 다른 방법들도 많이 있다. 

from imblearn.under_sampling import RandomUnderSampler
X_resampled, y_resampled = RandomUnderSampler(random_state=0).fit_resample(X, y)
count_and_plot(y_resampled)

Oversamping은 같은 데이터를 복제하여 over-fitting 문제를 야기한다. 

from imblearn.over_sampling import RandomOverSampler
X_resampled, y_resampled = RandomOverSampler(random_state=0).fit_resample(X, y)
count_and_plot(y_resampled)

 

SMOTE sampling은 

  1. 먼저 소수 클래스에서 각각의 샘플들의 knn(k-nearest neighbors)을 찾는다.
  2. 그리고 그 이웃들 사이에 선을 그어 무작위 점을 생성한다.
from imblearn.over_sampling import SMOTE
X_resampled, y_resampled = SMOTE(random_state=0).fit_resample(X, y)
count_and_plot(y_resampled)

 

 

ADASYN은 SMOTE의 개선된 버전이다. 동일한 프로세스를 진행한 후 점들에 임의의 작은 값을 더해줌으로써 조금 더 사실적인 데이터가 생성된다. 즉 모든 표본이 약간 더 분산된다.

다음과 같이 실행할 수 있다.

 

from imblearn.over_sampling import ADASYN
strategy = {1:76, 2:76, 3:76, 5:76, 6:76, 7:76}
X_resampled, y_resampled = ADASYN(sampling_strategy=strategy).fit_resample(X, y)
count_and_plot(y_resampled)

 

 

출처: https://dining-developer.tistory.com/27

 

불균형 클래스 분류(Imbalanced Classification)를 위한 4가지 방법

머신러닝으로 불균형 데이터를 분류하는 대부분의 예시는 이항 클래스 분류에 초점을 맞추고 있다. 그래서 이번엔 다중 클래스 불균형 데이터(Multi-class imbalanced data)를 처리하는 포스팅을 기록

dining-developer.tistory.com

 

'데이터분석 > 머신러닝' 카테고리의 다른 글

일반화된 분산팽창지수(Generalized VIF)  (0) 2023.09.13
LightGBM multiclassification code  (0) 2023.06.20
LGBM 이해  (0) 2023.06.18
엔트로피  (0) 2023.06.16
TPE 알고리즘  (0) 2023.06.12

통계적으로 두 그룹 간의 차이를 검정하는 가장 간단한 방법 중 하나는 "z-검정 (z-test)" 입니다. 이 방법을 사용하여 b 그룹이 a 그룹보다 큰 반응률을 가질 가능성이 있는지를 확인할 수 있습니다. 

1. 귀무가설(H0)과 대립가설(H1) 설정: 이 경우 귀무가설은 "두 그룹 간의 반응률 차이가 없다"입니다. 대립가설은 "b 그룹이 a 그룹보다 더 큰 반응률을 보인다"입니다.

2. 유의수준(α) 설정: 일반적으로 유의수준은 0.05 또는 0.01로 설정됩니다.

3. 계산: z-검정 통계량을 계산합니다. 이 값을 계산하기 위해서는 두 그룹의 반응률, 표준오차 및 표본 크기가 필요합니다.

4. 결과 해석: 계산된 z-검정 통계량을 표준 정규 분포에서 비교하여 p-값을 계산합니다. p-값이 유의수준보다 낮으면 귀무가설을 기각하고 대립가설을 채택합니다. 이 경우, b 그룹이 a 그룹보다 더 큰 반응률을 보인다는 결론을 내릴 수 있습니다.

위의 방법 외에도 t-검정(t-test), 카이제곱 검정(Chi-square test), 로지스틱 회귀(Logistic regression) 등의 분석 방법을 사용하여 두 그룹 간의 차이를 검정할 수 있습니다.

 

import numpy as np
from scipy.stats import norm

# a 그룹과 b 그룹의 샘플 크기와 반응률을 지정합니다.
n_a = 1000
r_a = 0.15
n_b = 1000
r_b = 0.2

# z-검정 통계량을 계산합니다.
p_a = r_a
p_b = r_b
se = np.sqrt(p_a * (1 - p_a) / n_a + p_b * (1 - p_b) / n_b)
z = (p_b - p_a) / se

# p-값 계산
p_value = norm.sf(z)

# 유의수준을 0.05로 설정한 경우, p-값이 유의수준보다 작으면 귀무가설을 기각합니다.
alpha = 0.05
if p_value < alpha:
    print("b 그룹이 a 그룹보다 더 큰 반응률을 보입니다.")
else:
    print("두 그룹 간의 반응률 차이가 없습니다.")

'통계분석 > 통계기본' 카테고리의 다른 글

모수 vs 비모수  (0) 2021.03.29
일반화 선형 모형(Generalized Linear Regression)  (0) 2020.09.09

+ Recent posts