데이터 분석가는 의사결정권자에게 정보를 주는 사람이다.
[QnA]
데이터 분석가가 통계를 많이 알면 좋은가?
너무 복잡한 통계를 얘기하고자 하면 의사결정권자가 이해를 못할 수 있다.
통계를 생각보다 많이 공부하지 않아도 된다.
의사결정권자에게 많이 설명 하지 않아도 되서....
(정말..??그래도 현실적인 얘기인듯. )
금융은 통계분석의 깊이는 어느정도 필요할까?
통계라는 거는 데이터를 가지고 하는거다.
통계분석의 깊이는 데이터의 양과 질에 의해서 결정 된다.
테이터가 없으면 신비로운 통계 분석을 한다고 해서 뭔가 결과가 나오지 않는다.
주식투자라고 한다면, 1년이 250일이면
1일 단위 데이터는 1년에 250건이고 10년에 2500건이다. 절대 많지 않다.
초단위 거래 는 1시간에 3600건
초단위 거래자들은 장기 흐름은 상관이 없다.
근데 1단위 거래를 하는 사람들은 초단위 거래 통계는 참고가 되지 않는다.
초단위 거래자들은 고도의 기법을 사용한다. 딥러닝을 사용하기도 한다.
국민연금의 경우 연단위로 거래를 하는데, 초단위 거래자들과는 아예 다른 방법을 쓴다.
서비스 기업은 금융보다 더 어렵다. 서비스가 계속 바뀌고 데이터 축적이라는 측면에서는 불리한 측면이 있다.
어떤 특성은 다른 특성보다 쉽게 알 수 있다.
- 주택의 입지, 교통, 환경 등은 쉽게 파악 가능하다.
- 가격은 거래가 성사되어야 파악할 수 있다.
(은행에서 주택 가격을 파악해서 대출금이 나오는데, 단독주책은 가치 판단이 어려워서 판단을 잘 안해준다. 거의 땅값밖에 안쳐준다. 유명한 건축가가 지은 단 하나의 집이면 비교 대상이 없어서 판단이 어렵다. )
미래에 대한 예측은 아니다. 미래에 대한 데이터가 없기 때문이다. 우리의 데이터는 과거와 현재 뿐이기 때문이다.
현재 시점에서의 가격 예측을 말하는거지, 내년 주택시장의 가격 예측을 말하는 것이 아니다.
EX) 모기업 통신사의 인바운드콜과 아웃바운드 콜이 있다.
아웃바운드 실적을 높이고 싶은게 고민이었다.
상담사의 어떤 요인이 실적에 영향을 주는가를 분석했다.
교육, 친절도, 적극도 등등.
그동안 당연히 적극적이고 경력이 많으면 실적이 높다고 생각해서 그것들을 관리하기 위해 복잡한 시스템을 유지하는 중이었다.
데이터 분석 결과는 그들이 측정하던 팩터랑 실적은 아무 상관이 없는 결과가 있었다.
실적과 관련이 있는건 통화량 뿐이었다. 통화량이 많으면 실적이 올라갔다.
관리자들이 이 통계 결과를 굉장히 싫어했다....
하지만 어떤거에 투자를 해야 하는지는 알 수 있다.
주거지 추천
- 주거지별 특징을 지수화
- 라이프스타일에 맞는 주거지를 추천
당근마켓 매물 분석
- 스팸의 시기별 가격 변화
- 매물 제목과 조회수릐 관계 분석
이정도를 할 수 있게끔 통계를 하면 된다..!!
이상한 통계한 용어
- 번역이 이상한 경우 : 모수(母數)
- 엄마와도 관련이 없고 분모와도 관련이 없다.
- 영어에서는 Parameter 이다.- 역사적인 과정을 거쳐 의미가 변한 경우 : 회귀분석
- 돌아가는 것과는 직접적인 관련이 없음- 만든 사람들의 사고방식이 좀 이상한 경우 : 통계적 가설 검정
- 과학에서는 가설을 실험으로 입증하는 실증주의가 있는데(입증하겠다.), 통계에서는 반증주의가 있었다.
반증주의는 싫어하는 주장을 까버리는 것이다.
통계에서는 용어를 보고 뜻을 짐작하면 안된다.
서울의 동대문이 종로구에 있는 것처럼...
서대문터도 서대문구에 없고 종로구에 있는 것처럼...
이름은 그저 이름일 뿐이라고 생각해야 통계학을 받아 들일 수 있다.
종류나 이름에 해당하는 변수이다.
숫자로 표시할 수 있는데 양적인 개념이 아니다.
ex) 주민번호에 옛날 남자가 1이고, 요즘남자가 3.
예를들어 아빠가 1 아들이 3일때, 그 집의 평균은 2니까 여자가 되는가? 아니자나..
그래서 연산이 의미가 없다.
연산이 대부분 의미가 없다.
순서가 있을 수 있으나, 간격이 일정하지는 않다.
이거냐 저거냐 하면서 갈리는 것들을 말한다.
데이터 분석에서 가장 널리 사용되는 도구
엑셀에서 열 수 있는 데이터 크기가 제한 된다.
(최대 100만행, 1만 6천열)
(엑셀에서 안열리면 빅데이터다!!)
함수가 부족하다.
ui 문제가 있다. 식이 복잡해지면 알아보기 어려워짐
영국에서는 코로나 확진검사 결과를 엑셀파일로 변환했다.
전국에서 넘어온 데이터를 합치다 보니 엑셀파일에 한계를 넘어서 검사 결과가 누락된적이 있다. 16000건정도.
유전자 이름 오류: 덱셀은 특정 문자가 자동으로 변환된다.
일부 유전자 기호가 자동으로 날짜로 바뀌었다. ex) SEPT2, MARCH1
유전자 기호를 포함한 논문 중 20%인 704편의 논문에서 오류가 발견됐다.
결국 생물학에서 유전자 이름을 변경함....
R
통계 분석이 간단.
프로그래밍에 대한 배경지식이 덜필요
Pytohn
머신러닝, 인공지능에 유리하다.
프로그래밍 배경이 있으면 유리하다.
데이터 분석 이외의 목적으로도 활용이 가능하다. (웹개발이라던가)
중심 경향치 : 데이터가 어디에 몰려있는가
분위수 : 등수 같은 것.
변산성 측정치 : 어떻게 퍼져있는가. (범위, IQR 등)
n 개의 값이 있을 때, 그 합계를 n 으로 나눈것.
평균은 극단값에 영향을 크게 받는다.
- 10,20,30,40,50 -> 평균이 30
- 10,20,30,40,500 -> 평균이 120이 됨
1986년 미국 대학 졸업생 평균 초봉조사결과
지리학과가 평균이 3억...
마이클 조던 때문에!!
값들을 크기 순으로 정렬했을 때 중간에 위치한 값
- 10, 20, 30, 40, 500 의 중간값 -> 30
중위수라고도 한다.
짝수개이면 가운데 두 값의 평균을 사용한다.
임금근로자의 평균소득은 2020년 기준 320만원
중위소득은 2020년 기준 242만원

크기순으로 정렬된 데이터를 q 개로 나누는 위치의 값.
데이터를 크기순으로 정렬을 하고, 4토막으로 나눈다

범위는 최대값 - 최소값을 뺀거다.
주식투자해서 A 는 100만원을 10종목에서 각각 10만원을 벌었다.
B도 100만원을 벌었는데, 한종목에서 1000만원을 벌고 나머지에서 900을 잃었다.
둘은 범위가 엄청 다르다.
IQR : 3사분위수 - 1사분위수
범위를 잡을 때 IQR 을 많이 본다.
양쪽 소수의 극단치 사례를 잘라내겠다는거다.
ex) 야 내가 주식으로 1억까지 찍어봤어! : 극단값일 뿐 보통의 결과는 아니다.
변산성 : 변하고 흩어지는 성질
변동성이라고 생각해도 된다.
중고차 가격이 어떤건 싸고 어떤건 비싼데 그 폭이 어떻게 되는가.
양쪽 끝으로 재면 -> 범위(range)
적당히 양쪽 끝을 잘라내고 재면 -> IQR
값 - 평균 (값에서 평균을 뺀 것이 편차다.)
편차의 평균은 0이 나오기 때문에 음수를 제거하고 평균을 구해야 한다.
분산은 평균을 제곱한 것의 평균이다.
편차의 절댓값의 평균을 구하는 것은 MAD 라고 한다.
분산은 편차의 평균을 구하기 위해 도입된 개념이고 여러 수학적인 이유로 MAD 보다 더 보편적으로 채택한다.
분산값이 너무 커지기 때문에 루트를 씌워준 것이다.
표준편차가 332.6131272715455 이면 어떤 의미인 건지???
표준편차의 2~3배 정도의 범위에 데이터가 퍼져있다.
상대적으로 생각도 할 수 있다. 표준편차가 작으면 좀 덜 퍼져있다.

<샤프지수>
표준편차는 여러가지로 쓸 수 있는데, 샤프지수라는게 있다.
샤프지수는 펀드의 수익률이 얼마인지 나오는건데 분모에 표준편차가 있다.
샤프지수 = 수익률 / 표준편차 라고 대강 볼 수 있다.
주식투자 100% 수익 본 사람과
주식투자 50% 본 사람이 있다. 수익률 기준에서는 100이 커보이지만
샤프지수로 보면 다를 수 있다. 들쭉날쭉 한지 안한지를 확인하는 지수라고 보면된다.
수익률의 변동성까지 보는 지수가 샤프지수이고 그때 표준편차가 쓰인다.
관심이 있는 집단 전체를 의미한다.
고객에게 무언갈 팔고 싶다면, 고객 전체가 모집단이다.
그래서 설문조사를 일부 한다면 그 일부다 표본집단이다.
표본 : 특정 연구에서 선택된 모집단의 부분집합
대부분의 경우 집단 전체를 전수조사하기는 어려우므로 무작위로 표본을 추출하여 모집단에 대해 추론한다.
중고차데이터를 생각한다면
모집단 : 전국 중고차 시장에서 거래되는 모든 차량
표본은 지금 있는 274건 데이터 전체 <- 이걸 표본 하나라고 부른다.
모집단은 굉장히 잘못 쓸 가능성이 높은 단어이다!!
모집단 선발을 위해 쓰였다는 말은 잘못된것이다.
모집단은 전체를 말한거니까.
데이터가 있다는것 자체가 표본이라는 뜻이다.
추론 통계는 모수를 추정하는거다.
모집단의 특성을 수치로 나타낼 수 있으면 모수라고 할 수 있다.
근데 우리는 모수를 알 수 없다.
우리가 아는 것은 '통계량'뿐이다.
파라메터 예시
모집단에서 표본을 뽑는건 "표본 추출"이라고 한다.
ex) 배달의 민족에서 배달 예상시간.
통계량으로부터 모수를 추측하는 절차
참고자료
https://angeloyeo.github.io/2021/01/05/confidence_interval.html
https://bkshin.tistory.com/entry/DATA-12
평균의 신뢰구간 구하기
계산을 통해서 평균의 신뢰 구간을 구할 수 있다.!pip install pingouin import pingouin as pg pg.ttest(df.price, 0, confidence=0.95)
같은 신뢰구간인데 위의 코드는 데이터 갯수가 100개 라서 신뢰구간이 931~1027로 넓게 나타난다.
아래는 데이터가 274개로 신뢰구간이 814~893으로 훨씬 좁게 나타나는 것을 볼 수 있다.
부트스트랩 참고자료 https://bkshin.tistory.com/entry/DATA-12

[부트스트랩으로 신뢰구간을 구하는 절차]
이 방법을 사용하면 표본이 200개밖에 없을지라도 부트스트랩을 통해 200개 보다 더 많은 통계량을 구할 수 있다. 따라서 부트스트랩을 활용하면 모수를 더 정확히 추정할 수 있다.
import scipy
scipy.stats.bootstrap([df.price], np.mean)
scipy.stats.bootstrap([df.price], np.median, confidence_level=0.99)

우리 표본이랑 모집단이랑 대충 비슷하게 생겼을거라고 가정한다.
우리 표본에서 랜덤으로 데이터를 뽑아서 원하는 값을 구해보는 방식을 무한히 반복하고
결과가 얼마만큼의 크기에서 왔다갔다하는지 관찰한다.
모집단에서 표본을 뽑다보면 평균이 높게 나올 때도 있고, 낮게 나올때도 있을거다.
그래서 부트스트랩핑은 표본에서 표본을 다시 뽑아서 테스트를 해보면 평균이 높게 나올 때도 있고
낮게 나올 때도 있다. 이 결과가 모집단에서도 같은거라고 생각하는거지.....
Karl Pearson, Ronald Fisher 등 통계학의 초기 인물들이 개발한 절차
과학은 증거를 입증하는거라고 생각하는데, 통계에서는 반증주의를 따른다.
반증주의는 내가 주장 하고 싶은 정 반대의 이론을 반박하여 나의 이론이 맞음을 증명하는거다.
입증하고 싶은 주장이 있으면 귀무가설이라는 반대되는 주장을 하고 이거를 반박해서 기각시켜서 반대 되는 나의 주장이 맞았다는걸 증명?한다.
“귀무가설이 사실이라면, 이렇게 내가 구한 관측치가 나올 확률이 매우 희박하다. 그러니 귀무가설은 틀렸다.”
귀무가설 수립
-> 기준으로 유의수준을 만들고
-> 수준을 넘지 못하면 거봐 내 말이 맞았지
-> 유의 수준을 넘으면
-> 결론을 내지 않거나, 재도전!!
귀무가설을 절.대. 인정해 주지는 않는다.

"P 값이 유의수준 보다 작으면 귀무가설은 기각한다. "
귀무가설이 참이라는 가정하에, 표본의 통계량이 관측 될 확률이 P-value 이다.
P 값이 낮으면 귀무가설이 일어날 확률이 낮은거라서 귀무가설을 기각 할 수 있다.
귀무가설이 900만원이라고 하면, 일단 모평균이 900만원이라고 가정한다.
표본에서 관찰한 것은 853만원이다.
900만원이라고 해도 좀 높게 나올수도 있고 낮게 나올수도 있는거다.
근데 표본의 853만원이 나올 가능성이 있냐는 것을 계산한 것이 P 값이다.

두 오류를 동시에 줄이는 것은 불가능하다.
기각을 안 할수록, 1종 오류는 감소하고 2종 오류는 증가하게 된다.
그래서 1종 오류의 최대 허용치를 설정해놓고, 그 뒤에 2종 오류를 최소화시키는 방식을 선택한다.
이 1종 오류의 최대 허용치가 바로 유의수준이다.
유의수준 : p-value가 ‘작다/크다’ 말할 기준
귀무가설로 평균이 900이 참이라고 가정한다. -> 이럴 때도 평균이 930, 870이 나올 수도 있다.
우리가 관찰한 결과는 853만원을 관측했다.
p 값 : 귀무가설이 참일 때 우리가 관찰한 결과가 나올 가능성
2% 아주 낮음
낮다고 생각하려면 기준이 있어야 한다.
우리는 5%는 넘겨야 한다는 기준을 정한거다. -> 이게 유의수준
QnA
Q : 귀무가설이 참일 경우, 1종 오류는 유의수준만큼 발생한다는 말이 이해가 안되는데요 유의수준이 5%이면.... 1종오류도 5% 발생하는건가요?
A : 5%에 미달하면 기각이다. 그런데 5% 미달하는 경우는 5% 발생한다.
귀무가설이 참인경우가 있고, 귀무가설이 거짓인 경우가 있다.
귀무가설이 참인데 5% 미달하면 기각이니까 이 5% 경우는 오류이다. 1종 오류
(귀무 가설이 참일 때 잘못 기각할 경우가 5% 라는 뜻이다. 근데 귀무 가설이 참인지 거짖인지 실제로는 알지 못한다!!! )

0.021852 < 0.05
유의수준을 못넘겼으니, 평균이 900이라는 귀무가설은 기각이다.

그러니까 우리는 대부분 신뢰구간을 보면 된다!
귀무가설이 신뢰구간안에 있으면 p > 0.05
귀무가설이 신뢰구간안에 없으면 p < 0.05
즉,
두개가 같은 결과이기 때문에 위의 신뢰구간 결과만 보면 되는데, 가끔 신뢰구간이 안구해 지는 경우도 있어서 유의수준을 따져봐야 하기도 한다.
+1 한 변구사 증가하면 다른 변수도 증가한다. (일란성 쌍둥이의 키)
-1 하나가 높으면 다른 하나가 낮다.
상관계수가 0이면 관계가 없다.
import pingouin as pg
pg.corr(df.price, df.mileage)

r 이 표본상관계수이다.
여기도 CI 가 나온다. 모상관계수는 -0.74~ -0.61 사이일거라는 추론이다.
귀무가설은 모 상관계수가 0.0 이라는거다.
결론. 귀무가설이 0 이라는건 기각이다!
sns.lmplot(x="mileage", y="price", data=df, ci=95)

price 와 mileage의 관계를 시각화 한 것이다.
r 에 나와있는 값처럼 -0.6 정도의 기울기 인 것을 확인 할 수 있다.
다른 예시도 보자
pg.corr(sp.GLD, sp.SPX) # r -> 0.466896
sns.lmplot(x="GLD", y="SPX", data=sp, ci=95)


상관계수가 커지면 p값이 작아진다.
상관계수가 낮은 자산을 여러개 사면, 다같이 망할 확률이 낮다!!
독립변수 x 를 이용해서 종속변수 y 를 추론하는거다.
독립변수 : 예측의 바탕이 되는 정보. 입력값
종속변수 : 예측의 대상. 출력값
종속변수가 연속인것을 회귀분석이라고 한다. (돌아가는 거랑 아무런 의미가 없다.)
y = wx + b (선형모형)
두가지의 관계가 직선패턴이라는 것.
from statsmodels.formula.api import ols m = ols("price ~ mileage", data = df).fit() m.summary()
mileage = 100000 price = -0.052 * mileage + 1258.7668 -> 100000마일리지일 때 가격 회귀분석 결과 : 738.7668000000001 df[df.mileage == 100000]["price"].mean() 실제 100000마일리지일 때 가격 : 720.0
범주형 변수는 곱하거나 더할 수 없다.
그래서 곱하거나 더할 수 있는 방법으로 만들어 준다.
이걸 더미코딩이라고 한다.
기본적으로 ABC 순으로 먼저 나오는 것이 기준(변경할 수도 있음)

from statsmodels.formula.api import ols m = ols("price ~ model", data = df).fit() m.summary()
Intercept 는 절편이라는 뜻이다. = bx = 0 # 아반테 80.3970 * x + 833.4146 -> 833.4146 x = 1 # K3 80.3970 * x + 833.4146 -> 913.8116이 의미는 K3 를 살때 80.3970 이만큼 웃돈을 주고 사야한다는 것이다.
df.groupby("model")["price"].mean() Avante : 833.414634 K3 : 913.811594실제 평균값과 회귀분석으로 얻은값이 거의 같음을 알 수 있다!
sns.boxplot(x="model", y="year", data=df)
- 위 분포를 보면, K3 가 새차가 많다.
K3 자체가 비쌌던게 아니라 새차가 많아서 비싼거였을지도 모른다!!- 그래서 연도가 중요하구나 하고 연도만 회귀분석을 하려고 하는것도 오류가 있다.
- 연도만 본다면, 연도가 늘어나서 가격이 늘어난건지 아니면 주행거리가 같이 길어져서 가격이 올라간건지 알기가 힘들다.
z가 종속변수 y에 미치는 영향이 x의 기울기에 간접 반영될 수 있기 때문데 z를 모형에 독립변수로 함께 포함하여, x의 기울기에 z의 영향이 간접반영되지 않도록 해야한다.
f = ols("price ~ year+ mileage +model", data = df).fit() f.summary()
modelK3 = 1 year = 2015 mileage = 50000 p = -1.713e+05 + modelK3 * -40.4089 + year * 85.6030 + mileage * -0.0023 p는 K3일 때, 2015년산일때, mileage 가 50000d 일 때의 추정값이다. -> 1034.6360999999742
QnA
데이터가 적으면 안되고 데이터가 많아야 한다는 생각이 있는데
유의미한 분석이라는 것은 없다.
모든 분석은 유의미하다.
많은 분석이 T 분포에 의지하고 있는데, 이걸 만든 사람의 논문을 보면 데이터가 3건 밖에 없다.
데이터가 많아야 되는 이유?
귀무가설을 기각하려고
데이터가 적으면 문제느 없지만 결론을 내리기 힘들다.
결론이 난다는건 충분한 데이터를 모은 것이다.돼지가 말할 수 있다는 걸 입증하기 위해서는
말하는 돼지 한마리만 있으면 된다.돼지는 말할 수 없다.(입증하기 아주 어렵다.)