Entropy, Cross-Entropy, KL Divergence

Entropy는 Cross Entropy Loss라는 이름으로 Deep Learning에서 분류 모델을 하는 이에게는 꽤나 익숙한 함수이다. 식으로는 다음과 같이 쓴다.

$$-{1 \over n}\sum\limits^n_{i=1}\sum\limits^c_{c=1}L_{ic}log(P_{ic})$$

  • $n$ = 데이터 갯수
  • $C$ = 범주 갯수
  • $L$ = 실제 값 (주로 0 또는 1)
  • $P$ = 실제 값에 대한 확률 값 (0~1)

Entropy는 불확실성을 계산하기 위한 Metric이다. 어떤 바구니가 있다고 하고 안에 붉은 공만 있다고 하자. 이러면 공을 꺼내면 항상 붉은 색만 나올테니, 이럴 때는 불확실성이 존재하지 않는다. 이 때 Entropy는 0이다.

일상 문제로 가져와서 생각해보면 이런 경우는 존재하지 않을 때가 더 많다. 앞서 언급한 분류문제를 기반으로 생각해본다면 분류를 하는 것자체가 데이터가 섞여있는 것을 의미하기 때문에 더더욱 그렇다. 엔트로피의 식은 다음과 같다. $$H(q) = -\sum_{c=1}^{C} q(y_c)log(q(y_c))$$ 이 식을 활용해서 분포간의 차이를 보는 것이 Cross Entropy이다. 실제 분포가 $q$가 있고, 우리가 모델로서 만드는 분포 $p$의  있을 때 특정 실제 값 $(y_c)$와 입력한 값 $p(y_c)$간  차이를 보는 것이다.
$$H_p(q) = -\sum_{c=1}^{C} q(y_c)log(p(y_c))$$ Python으로 구현하면 이렇게 쓸 수 있겠다.

import numpy as np
def CrossEntropy(Q, P):
Q = np.float_(Q)
P = np.float_(P)
return -np.sum(Y*np.log(P) + (1-Q)*np.log(1-P))

여기서 확장해서 "차이"들을 모두 Sum해서 이 두 분포간의 전체적인 차이를 보는 것이 바로 Kullback-Leibler Divergence이다. 식은 다음과 같고 이산형 분포를 감안하여 식을 썼지만 $\int$를 쓰면 연속 분포에서도 가능할 것이다.

$$D_{KL}(q||p) = -\sum_{c=1}^{C} q(y_c) [log(p(y_c)) - log(q(y_c))] = H_p(q) - H(q)$$ Entropy부터 Kullback-Leibler Divergence까지 연관성에 대해서 대략 정리해보았다.

Read more

DataFrame은 Pandera로, 모델은 Pydantic으로 데이터를 검증한다.

DataFrame은 Pandera로, 모델은 Pydantic으로 데이터를 검증한다.

Pandera: 데이터프레임 검증에 최적화된 도구 주요 장점 * Pandas와 통합: Pandas 데이터프레임에 대해 스키마 기반 검증을 수행합니다. * 유연한 검증 조건: 열 데이터 타입, 값 범위, Null 여부 등 다양한 검증 조건을 정의할 수 있습니다. * 명확한 오류 메시지: 스키마 불일치에 대한 명확한 오류 메시지를 제공합니다. 단점 * 대용량 데이터 검증에서는 속도가 느릴 수

Tobit Regression은 Censored Data에 적합한 Regression이다.

Tobit Regression은 Censored Data에 적합한 Regression이다.

Tobit Regression * Tobit 회귀(Tobit Regression)는 종속 변수가 특정 값에서 절단(Censored)된 상황에서 데이터를 분석하기 위해 사용되는 통계 기법입니다. * James Tobin이 처음 제안한 이 모델은 경제학과 사회과학 분야에서 자주 사용되며, 일반 선형 회귀로는 설명할 수 없는 상황에서 효과적으로 적용할 수 있습니다. Tobit Regression 수식 1. 관측된 종속 변수