표기법 3가지: snake_case, camelCase, PascalCase
UPPER_SNAKE_CASE: 상수인 경우
PEP8 명명규약
- 모듈은 소문자
- 클래스는 파스칼케이스
- 상수는 UPPER_SNAKE_CASE
- 함수,메소드,변수명은 lower_snake_case
- 클래스 메소드의 시작은 cls, 메소드의 시작은 self
- 클래스의 프라이빗속성은 _, 퍼블릭 속성은 _ 없이
표기법 3가지: snake_case, camelCase, PascalCase
UPPER_SNAKE_CASE: 상수인 경우
PEP8 명명규약
코드 포매팅: 소스코드에 일련의 규칙을 적용해 특정한 형식을 갖추게 하는 것
PEP8(Python Enhancement Proposal8): 파이썬 코어 개발팀이 제안한 작성방법
Black(코드 포매터)
블랙 설치하기: python3 -m pip install --user black
명령행에서 블랙 실행하기: python -m black script.py
하위 파일을 모두 블랙으로 포매팅하기: python -m black 경로
표준 행 길이 설정: python -m blakck -l 120 script.py
따옴표를 변경하지 않도록 설정: python -m black -l 120 -S script.py
블랙으로 수정될 내용 미리보기: python - m black --diff script.py
명령어 이력: history
글로브패턴: 와일드카드인 *, ?를 사용하여 표현하는 식
파일 보기: dir(윈도우), ls(맥OS, 리눅스)
폴더명에 공백이 있는 경우: 큰따옴표로 폴더명을 묶어서 명령인수를 만듦
마침표로 시작하는 파일: 설정파일 (숨겨짐)
ls에 해당하는 옵션: -l(긴 형식의 파일보기) , -a(숨김파일 포함해서 모두보기)
현재 경로 밑에 원하는 파일 검색: find . -name *.py
파일 복사: cp [복사하려는 파일] [복사할 폴더]
파일 이동: mv [복사하려는 파일] [복사할 폴더]
파일명 변경: mv [변경하려는 파일] [변경명]
파일 삭제: rm -r (강제로)
폴더 생성: mkdir [폴더명]
프로그램의 위치 찾기: which [프로그램명]
모든 명령행을 지우고 싶을때: clear
환경변수 보기: env
환경변수에 설정된 값 보기: echo [환경변수]
환경변수: 각 프로세스에 영향을 주는 사용자 설정값들의 모임
프로세스를 띄울때, 환경변수가 copy되어 해당 프로세스에만 적용됨.
운영체제의 환경변수집합을 새로운 프로세스가 생성될때 복사되며 이를 master copy라고 함
프로세스를 시작하면 현재 디렉토리에서 프로그램을 찾고, 이후 PATH 환경변수에 설정된 경로에서 찾음
경로를 ':'으로 여러개 설정할 수 있으며 이름이 중복된다면 가장위의 PATH 환경변수에서 프로그램을 실행함
환경변수를 영구적으로 수정하고 싶다면, .bashrc 파일에 'export 환경변수 = 내용'을 추가
https://light-tree.tistory.com/196
* 위 블로그 내용을 참고하여 정리한 글임.
The accuracy of predicted probability of model's ouput
예를 들어, 모델이 50% 정도의 신뢰도를 가지고 output을 줬을때, 그 output이 제대로 classification 된 정도가 실제로 50%가 된다면 모델은 잘 calibrated 되었다고 말함.
이는 모델의 예측값이 reliable and trustworthy 하다는 것을 뜻하기 때문에 매우 중요한 요소로 쓰임.
학습된 모델이 실제 얼마나 신뢰도를 가지는지를 판단하기 위함.
GAN 모델이란? (2) | 2021.04.06 |
---|---|
CNN으로 개와 고양이 분류하기 (1) | 2020.02.25 |
MNIST를 이용해 간단한 CNN만들기 (2) | 2020.02.12 |
배치학습 vs 온라인학습 (0) | 2020.02.12 |
아침:
성산포종합여객터미널에서 우도가는 매시간마다 들어가는 배가 있음
점심: 짜장면, 해물짬뽕
우도즐기는법
https://blog.naver.com/sk-bubu_traveler/223395437375
우도 스쿠터 타기
저녁: 갈치
https://velog.io/@finallazy/Python-multiprocessing-Pool
https://chealin93.tistory.com/288
개인의견: 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
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()
import dask.dataframe as dd
df = dd.read_csv('file.csv')
df.groupby(df.user_id).value.mean().compute()
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()
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이라고 한다.
만약 comfounder가 관찰하기 어려운거라면?
(1) M = a + bT (alpha)
(2) Y = beta1 + beta2M + beta3T (beta)
(3) chain rule 적용으로 casual effect계산
이론적인 structural model이 있어야 분석이 가능하고 실제 적용 사례들이 많지는 않다는게 현재 상태이다.
The boo
인과관계
프레임워크가 필요하다
흄은 인과관계를 원인에 대한 필연적 결과가 아닌 이전의 경험과 아이디어로부터 결과가 연속적으로 발생한다는 관념에 불과하다라고 정의(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 |
---|
다중공선성을 진단하기 위해 사용되는지수로
독립변수가 여러개 있을 때, 특정 독립변수를 종속변수로하고 나머지 독립변수를 독립변수로 하여 회귀분석을 수행한다. 각 회귀식의 결정계수를 계산하여 1/1-R^2값으로 VIF를 정의한다.
상관관계가 높은 독립변수는 추정된 계수가 분산이 커진다. 얼마나 커지는지 확인할 수 있는게 VIF값이고 VIF가 크다는것은 다른 변수들로 설명가능함을 나타낸다.
https://direction-f.tistory.com/46
http://web.vu.lt/mif/a.buteikis/wp-content/uploads/PE_Book/4-5-Multiple-collinearity.html
만약 데이터프레임 안에 범주형 변수가 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 |