기본 콘텐츠로 건너뛰기

[math] 정적분의 특성

[data analysis] 확률과 주요통계량: 모멘트와 기대값

확률과 주요통계량

내용

모멘트(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)라고 합니다.

그림 1 주사위 한개 시행할 경우의 각 주사위눈이 나올 확률질량함수.
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로 할 경우의 기대값은?

이 문제는 다음 과정으로 계산할 수 있습니다.

  1. 동전 3개의 시행에서 일어날 수 있는 사건들 표본공간 S를 결정
  2. 확률변수는 앞면의 발생횟수로 0, 1, 2, 3이 되며 S에서 각 사건의 발생빈도 계산
  3. 확률질량함수(PMF) 계산(식 7)
    • PMF = 각 사건의 발생빈도(식 7)
      표본공간의 총빈도
  4. 기대값을 계산
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개 구간으로 명목화하고 각 구간의 평균 이익을 나타낸 자료입니다. 이 자료를 기준으로 두 주식에 대해 기대 수익을 계산해 봅니다.

표 1 주식 레버리지와 인버스의 구간 이익
레버리지 인버스
구간이익 확률 구간이익 확률
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원 손해가 예상됩니다.

주식의 경우 상황의 변화가 심하기 때문에 위 결과가 미래의 추정을 반영할 수 없습니다. 그러나 계산 기간과 유사한 상황이 반복적으로 일어난다면 거래를 위한 참고 자료가 될 수 있을 것입니다. 기대값은 확률적으로, 예상되지 않는 변화들 사이에 균형을 유지하기 위한 값을 의미하기 때문에 다양한 기간에 기대값의 경향을 조사한다면 주식들의 변동상황에 대한 정보를 파악하는데 도움이 될 것입니다.

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b