- 공유 링크 만들기
- 이메일
- 기타 앱
확률과 주요통계량
내용
모멘트(Moment)
확률변수와 확률 분포의 특징과 형태를 수학적으로 설명하기 위한 정량적 지표를 모멘트(moment)라고 하며 식 1과 같이 정의합니다.
$$\begin{align}\tag{식 1}&\text{n 차 모멘트}= E(x^n)\\ &n= 1, 2, \cdots \end{align}$$식 1에서 E(x)는 확률변수 x에 대한 기대값(평균)을 나타냅니다. 그러므로 모멘트(moment)는 변형된 확률변수의 기대값을 의미합니다. 이러한 모멘트는 기술 통계에서 소개한 평균, 분산과 함께 왜도, 첨도 등 다양한 통계량의 유도에 사용됩니다.
기대값(Expected Value)
평균은 변수들의 특성을 파악하기 위해 가장 많이 사용되는 통계량입니다. 이 통계량은 각 변수값에 대한 확률을 고려하는 것으로 기대값(expected value, E(X))이라고 합니다.
확률변수 x에 대응되는 확률은 다른 변수들에 비해 그 변수가 나타날 상대 가능도(relative likelihood)를 의미합니다. 많은 경우 확률변수와 확률의 관계는 함수로 특정할 수 있으며 그 함수를 확률함수라고 합니다.
확률함수는 변수가 이산형일경우에는 확률질량함수(probability mass function), 연속형일 경우에는 확률밀도함수(probability density function)로 구분합니다. 일반적으로 확률밀도(질량)함수는 f(x)로 나타내며 그 함수의 합(적분)인 누적확률함수는 F(x)로 표현합니다. 이 확률밀도(질량) 함수를 사용하여 1차모멘트인 평균은 식 2와 같이 계산할 수 있습니다.
$$\tag{식 2}\mu=E(X)=\begin{cases}\sum^N_{i=0} x_iP(X=x_i)&x:\text{이산변수},\; N:\text{샘플 크기}\\ \int^\infty_{-\infty}xf(x)\,dx& x:\text{연속변수} \end{cases}$$모멘트는 거듭제곱한 확률변수에 대한 기대값입니다. 그러므로 식 3과 같이 정의합니다.
$$\tag{식 3}\text{Moment}=E(X^n)=\begin{cases}\sum^N_{i=0} x_i^nP(X=x_i)&x:\text{이산변수},\; N:\text{샘플 크기}\\\int^\infty_{-\infty}x^nf(x)\,dx& x:\text{연속변수} \end{cases}$$import numpy as np import pandas as pd from scipy import stats import matplotlib.pyplot as plt from scipy import special from sympy import * import FinanceDataReader as fdr
예 1)
한 학기 동안 통계학 강의에서 받은 학생 A의 4번의 점수가 각각 82, 75, 83, 90일 경우 평균 점수를 계산해 봅니다.
자료에서 각 점수에 대한 확률은 $\frac{1}{4}$입니다. 즉, 확률질량함수(pmf) f(x)는 $\frac{1}{4}$입니다.
data=np.array([82, 75, 83, 90]) pmf=1/4 E=np.sum(data*pmf); E #기대값
82.5
data.mean() # 평균
82.5
각 시험에 가중치를 달리하여 적용한다면 결국 자료 자체의 각 값이 달라지므로 기대값 역시 변경 됩니다.
weight=np.array([1/10, 2/10, 3/10, 4/10]) dataWeig=weight*data print(dataWeig)
[ 8.2 15. 24.9 36. ]
E_weig=np.sum(dataWeig*1/4); E_weig
21.025
dataWeig.mean()
21.025
예 2)
주사위 1회 시행에서 발생하는 점의 수를 확률변수로 하면 그 변수의 값들의 분포와 기대값을 결정합니다.
각 값이 나올 확률은 $\frac{1}{6}$로 균일 합니다. 이 균일한 확률을 그래프로 나타내보면 그림 1과 같습니다. 이러한 분포를 균일분포(uniform distribution)라고 합니다.
x=range(1, 7) y=np.repeat(1/6, 6) plt.figure(figsize=(3,2)) plt.scatter(x, y, s=50, label=r"pmf = $\frac{1}{6}$=0.1667") plt.hlines(1/6, 1, 6, linestyle="--", color="g") plt.xlabel("x, number of dice") plt.ylabel("PMF") plt.xticks([1, 2, 3, 4, 5,6]) plt.yticks([0, 1/6, 2/6]) plt.legend(loc="best") plt.show()
이 시행의 기대값은 다음과 같습니다.
x=np.arange(1, 7) E=np.sum(x*Rational(1,6));E
$\frac{7}{2}$
확률변수 x의 선형변환에 의한 새로운 변수에 대한 기대값은 식 4와 같이 계산됩니다.
E(ax + b) = aE(x) + b, a, b는 상수 | (식 4) |
선형변환
식 5와 같이 두 변수에 대해 각각의 변환과 합의 변환이 같고 상수에 대해 배분법칙이 성립되는 변환(함수)의 관계가 성립하는 상태를 나타냅니다.
T(u + v) = T(u) + T(v) | (식 5) |
T(au) = aT(u), a: 상수 |
식 5는 표본공간의 확률의 합이 1이라는 공리를 사용하여 식 6과 같이 증명할 수 있습니다. 확률변수에 대응하는 확률과의 관계를 확률함수로 정의할 수 있으므로 언급한 공리는 모든 실수 범위의 확률변수 x에 대한 확률함수 f(x)의 적분이 1임을 의미합니다.
$$\begin{align}\tag{식 6}E(ax+b)&=\int^\infty_{-\infty}(ax+b)f(x)\,dx\\ &=\int^\infty_{-\infty}axf(x)\,dx+b\int^\infty_{-\infty}f(x)\,dx\\&=ax+b\\ &\because\; \int^\infty_{-\infty}f(x)\,dx=1\end{align}$$예 3)
동전 3개를 던지는 시행에서 앞면이 나오는 횟수를 확률변수 X로 할 경우의 기대값은?
이 문제는 다음 과정으로 계산할 수 있습니다.
- 동전 3개의 시행에서 일어날 수 있는 사건들 표본공간 S를 결정
- 확률변수는 앞면의 발생횟수로 0, 1, 2, 3이 되며 S에서 각 사건의 발생빈도 계산
- 확률질량함수(PMF) 계산(식 7)
PMF = 각 사건의 발생빈도 (식 7) 표본공간의 총빈도
- 기대값을 계산
x=np.array([0,1,2,3]) S=list(itertools.product([0,1], repeat=3));S
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
위 코드에서 앞면을 1, 뒷면을 0으로 설정하였으므로 각 횟수에 대한 앞면의 결과는 그 결과의 합으로 나타낼 수 있습니다.
S1=[sum(i) for i in S]; S1
[0, 1, 1, 2, 1, 2, 2, 3]
확률변수 x와 대응되는 빈도수는 np.unique()
함수에 의해 계산됩니다.
- np.unique(x, return_index=False, return_counts=False, axis=None)
- 객체 x에서 고유한 요소들과 각각의 빈도를 반환
- return_index: 반환된 요소들의 인덱스 (첫 번째로 감지되는 인덱스)
- return_counts: 각 고유값(unique)의 빈도수
- axis=None: 함수가 실행되는 기준 축, None는 객체를 1차원으로 전환
val,fre=np.unique(S1, return_counts=True) print(fre)
[1 3 3 1]
pmf=fre/sum(fre) print(pmf)
[0.125 0.375 0.375 0.125]
E=np.sum(val*pmf) print(E)
1.5
기대값의 선형결합
여러 독립사건들의 결합에서의 기대값을 고려할 있습니다. 예를 들어 어떤 사람(A)의 주당 출근 시간(W)에 대한 확률분포를 작성하기 위한 고려사항들은 다음과 같습니다. 이 사항들에 부합하는 W는 식 8과 같이 계산됩니다.
- 일주일의 총 출근 시간은 월요일에서 금요일까지의 출근시간을 모두 합한 결과(W)
- 각각의 출근시간은 동일한 확률을 가지는 확률변수
- 각 출근시간은 상호간의 영향을 주지 않기 때문에 독립
- 각 요일의 출근 시간을 X1, · · · , X5
W = X1 + X2 + X3 + X4 + X5 | (식 8) |
총시간의 기대값은 개별시간의 기대값의 합과 같습니다. 즉, 랜덤변수들의 합의 기대값은 개별 랜덤변수들의 기대값의 합과 같습니다. 그러므로 일주일의 평균 출근 시간은 식 9와 같이 매일의 평균의 합으로 계산할 수 있습니다.
E(W) | = E(X1 + X2 + X3 + X4 + X5) | (식 9) |
= E(X1) + E(X2) + E(X3) + E(X4) + E(X5) |
기대값은 식 5와 같이 선형변환이 성립합니다. 이 관계를 성립하는 두 개 이상의 변수들의 결합을 선형결합(linear combination) 이라 합니다. 기대값의 선형결합을 식 10과 같이 일반화하여 나타낼 수 있습니다.
Z = aX + bY, a, b는 상수 | (식 10) |
E(Z) = E(aX + bY) = aE(X) + bE(Y) |
예 4)
주식 kodex 레버리지(lever)와 kodex 인버스(inverse)를 각각 150과 300주씩 매입했습니다. 표 1은 각 주식의 시가와 종가 사이의 일일 평균 변화율을 6개 구간으로 명목화하고 각 구간의 평균 이익을 나타낸 자료입니다. 이 자료를 기준으로 두 주식에 대해 기대 수익을 계산해 봅니다.
레버리지 | 인버스 | |||
---|---|---|---|---|
구간이익 | 확률 | 구간이익 | 확률 | |
0 | -1175.000 | 0.007 | -122.500 | 0.007 |
1 | -716.250 | 0.013 | -62.879 | 0.108 |
2 | -395.000 | 0.115 | -22.019 | 0.341 |
3 | -134.449 | 0.387 | 17.398 | 0.403 |
4 | 129.087 | 0.341 | 56.944 | 0.118 |
5 | 363.158 | 0.125 | 94.000 | 0.016 |
6 | 643.750 | 0.013 | 147.500 | 0.007 |
위 자료는 FinanceDataReader 패키지를 사용하여 호출한 자료를 사용하여 작성한 것입니다. 이 변환과정에서 사용자 정의함수 expectStock()을 작성, 적용하였습니다. 이 함수는 목록화된 자료와 기대값을 반환합니다.
def expectStock(a, grpNum): a['diff']=a['Close']-a['Open'] a['percent']=a['diff']/a['Open']*100 a['inDe']=pd.cut(a['percent'], bins=grpNum, labels=range(grpNum)) fre=a['inDe'].value_counts() p=fre/fre.sum() profit=a[['diff','inDe']].groupby(['inDe']).mean() data=pd.concat([profit, p], axis=1) E=(data.product(axis=1)).sum() data.columns=["diff_intval", "Prob"] return([E, data])
lere=expectStock(lever, 7) inre=expectStock(inver, 7) pd.concat([lere[1], inre[1]], axis=1).round(3)
st=pd.Timestamp(2022,1, 1) et=pd.Timestamp(2023, 3, 28) lever=fdr.DataReader('122630', st, et).iloc[:,[0, 3]] inver=fdr.DataReader('114800', st, et).iloc[:,[0, 3]] lere=expectStock(lever, 7)[1] #리버리지 목록화된 자료 inre=expectStock(inver, 7)[1] #인버스 목록화된자료
위 코드의 lere와 inre는 사용자정의함수인 expectStock()의 결과로서 위 표의 레버리지와 인버스에 대응하는 각 두 열을 나타냅니다.
기대값은 위 자료의 구간이익과 확률의 곱을 더한 것입니다. 다음은 각 주식의 주당 기대값입니다.
#레버리지 E_lev=(lere.product(axis=1)).sum(); E_lev.round(3)
-16.738
#인버스 E_inv=(inre.product(axis=1)).sum(); E_inv.round(3)
1.131
두 주식의 기대값의 선형 결합에 의해 구입한 주식의 총 기대값을 계산할 수 있습니다.
(150*E_lev+300*E_inv).round(3)
-2171.311
위 결과에 의하면 약 2172원 손해가 예상됩니다.
주식의 경우 상황의 변화가 심하기 때문에 위 결과가 미래의 추정을 반영할 수 없습니다. 그러나 계산 기간과 유사한 상황이 반복적으로 일어난다면 거래를 위한 참고 자료가 될 수 있을 것입니다. 기대값은 확률적으로, 예상되지 않는 변화들 사이에 균형을 유지하기 위한 값을 의미하기 때문에 다양한 기간에 기대값의 경향을 조사한다면 주식들의 변동상황에 대한 정보를 파악하는데 도움이 될 것입니다.
댓글
댓글 쓰기