수업의 마지막날 - 다음학기 열릴 수업 및 팁
AI 금융은 한국에선 성공하지 못할 것, 필요한 데이터가 없다
--자신의 도메인 내에서 지식을 가지고 해당 지식을 구현 해야함, 알고리즘의 문제가 아님
레이블이 BIG_DATA_ANALYSIS_IN_FINANCIAL_MARKET인 게시물을 표시합니다. 모든 게시물 표시
레이블이 BIG_DATA_ANALYSIS_IN_FINANCIAL_MARKET인 게시물을 표시합니다. 모든 게시물 표시
2020년 6월 16일 화요일
Day_10. Term paper 발표&팁
Data를 가지고 분석을 할 때 해당 data들을 자리수를 맞추기 위한 정규화를 진행하는게 좋다
단위가 너무 크면 뒤의 자리수가 짤리는 위험이 있다,
머신러닝으로 환율 예측은 좋은 결과를 보기 힘들다
단위가 너무 크면 뒤의 자리수가 짤리는 위험이 있다,
머신러닝으로 환율 예측은 좋은 결과를 보기 힘들다
2020년 5월 27일 수요일
Day_09. 기술적 지표와 행태주의
Soros boom & buse – 노동시장에서 임금, 고용수치를 가지고 분석했지만 이제는 의미가 없다고 생각해 분석하지 않음
Covid 19를 통해 생활 패턴이 바뀐점도 괄목할만한점
주식시장의 위험 – 지시여건 – 정책 – 산업위험 – 종목
**사양산업** 철강, 화학, 조선 LCD ,조동차 부품
금융자산의 예측 – Random forest 현상
==화재 경보기의 예시 – 경보는 하나 판단은 다른 방안으로
==deep learning은 예측에 사용하지 마라
==AI 금융 – REINFORCE LEARNING
기초분석,QUANT, 기술적 분석 , 추가적 분석(센티멘트) 인간심리 분석 + 기술적 분석을 같이 진행
대부분 투자자의 선택
=종목선택 –추천,연구(AVAILABILITY BIAS , RECENCY BIAS 의 형태) 최근 동향 분석
=행동패턴 –급등시 매도(시장 이윤보다 수익이 나면 파는 경우가 대부분)
산업의 3년주기설
=신재품을 개발해도 3년까지의 물량은 구매해 주고 그 이상은 미정으로 둔다, 경쟁사와 입찰을 통해 매수하므로 기존 회사는 신재품을 개발할때까지 3년의 시간동안 수익이 거의 없는상태에서 지내야 한다
AI 금융의 특징
=복잡한 수식을 주면서 해결을 요청하면 풀지 못한다
=풀수 있는 형태로 문제를 바꿔서 학습시켜야 한다
Covid 19를 통해 생활 패턴이 바뀐점도 괄목할만한점
주식시장의 위험 – 지시여건 – 정책 – 산업위험 – 종목
**사양산업** 철강, 화학, 조선 LCD ,조동차 부품
금융자산의 예측 – Random forest 현상
==화재 경보기의 예시 – 경보는 하나 판단은 다른 방안으로
==deep learning은 예측에 사용하지 마라
==AI 금융 – REINFORCE LEARNING
기초분석,QUANT, 기술적 분석 , 추가적 분석(센티멘트) 인간심리 분석 + 기술적 분석을 같이 진행
대부분 투자자의 선택
=종목선택 –추천,연구(AVAILABILITY BIAS , RECENCY BIAS 의 형태) 최근 동향 분석
=행동패턴 –급등시 매도(시장 이윤보다 수익이 나면 파는 경우가 대부분)
산업의 3년주기설
=신재품을 개발해도 3년까지의 물량은 구매해 주고 그 이상은 미정으로 둔다, 경쟁사와 입찰을 통해 매수하므로 기존 회사는 신재품을 개발할때까지 3년의 시간동안 수익이 거의 없는상태에서 지내야 한다
AI 금융의 특징
=복잡한 수식을 주면서 해결을 요청하면 풀지 못한다
=풀수 있는 형태로 문제를 바꿔서 학습시켜야 한다
2020년 5월 15일 금요일
Day_08. Technical analysis in economics
Technical analysis in economics = 경제학과에서의 기술적 분석(지표)
외환시장에서 Head-shoulder 전략
=외국에서는 잘 먹히는 전략
=국내에서는 사전적으로 알수 있는 방안이 없기 때문에 잘 안됨
시장의 효용성
=무의미 하다
=무의미 하나 사용하는 이유
==상대졸업 현상 – 사회에서 시장 효용성/함수 계산에서 자산 수요를 예측하기 힘들기 때문
==Noise trader가 자주 사용한다
Bolinger Band/envelope – 볼린저밴드
=machine learning hedge fund 전략으로 사용
총선과 테마주
=핵심은 “원하는 수익률” 이다
=우량주 vs 잡주
==우량주의 일일 변동성은 적으나 크게 볼필요는 있다(하락한다)
거래량 지표
=경제학에서는 가격에 집중
=손바뀜 문제 – 시장 참여자간의 이질성(heterogeneity)
=거래량 vs 변동성
==변동성이 중요하다
==거래량(order flow)는 사적 정보에 의해 움직이는 경우가 많음
최근 주목받는 연구
1.기계학습(Machine learning)
=가격 예측에 사용
2.위험관리
==내 예측이 잘못되면 발생할수 있는 예측 손실/오류의 최소화
==사용되는 방법론
==1.deep learning
===market sentiment(information)을 기반으로 portfolio 구성
===자동주문/매도 를 통한 감정 배제 거래
===자동 주문량 측정(automatic betting size measure)
==2.자연어 처리
===graph 이론, database화
===pagerank, new path finding , centrality , clustering 사용
==3.기술적 지표
===BB (Bolinger Band 사용), 거래량 확인
**Deep learning 은 가격 예측에 사용하지 않음**
알아둘 것
1.bigdata 분야
=자연어처리(twitter, fb, instagram, youtube)
=사진분석(deep learning)
=동영상분석(kaggle –효율이 제일 좋다)
2.알고리즘 트레이딩(algorithm trading)
=market의 micro structure 를 이해해서 알고리즘화
==order flow 조정, real time cancel/order 기능
3.AI
=AI 시대는 분명히 도레한다
=인간을 대체할까? NO, 인간이 해야할 일은 있을것이다
4.Block chain
=화폐 시대의 개혁의 바람이 될수도 있다
==미국의 움직임을 주시해야 하는 분야
외환시장에서 Head-shoulder 전략
=외국에서는 잘 먹히는 전략
=국내에서는 사전적으로 알수 있는 방안이 없기 때문에 잘 안됨
시장의 효용성
=무의미 하다
=무의미 하나 사용하는 이유
==상대졸업 현상 – 사회에서 시장 효용성/함수 계산에서 자산 수요를 예측하기 힘들기 때문
==Noise trader가 자주 사용한다
Bolinger Band/envelope – 볼린저밴드
=machine learning hedge fund 전략으로 사용
총선과 테마주
=핵심은 “원하는 수익률” 이다
=우량주 vs 잡주
==우량주의 일일 변동성은 적으나 크게 볼필요는 있다(하락한다)
거래량 지표
=경제학에서는 가격에 집중
=손바뀜 문제 – 시장 참여자간의 이질성(heterogeneity)
=거래량 vs 변동성
==변동성이 중요하다
==거래량(order flow)는 사적 정보에 의해 움직이는 경우가 많음
최근 주목받는 연구
1.기계학습(Machine learning)
=가격 예측에 사용
2.위험관리
==내 예측이 잘못되면 발생할수 있는 예측 손실/오류의 최소화
==사용되는 방법론
==1.deep learning
===market sentiment(information)을 기반으로 portfolio 구성
===자동주문/매도 를 통한 감정 배제 거래
===자동 주문량 측정(automatic betting size measure)
==2.자연어 처리
===graph 이론, database화
===pagerank, new path finding , centrality , clustering 사용
==3.기술적 지표
===BB (Bolinger Band 사용), 거래량 확인
**Deep learning 은 가격 예측에 사용하지 않음**
알아둘 것
1.bigdata 분야
=자연어처리(twitter, fb, instagram, youtube)
=사진분석(deep learning)
=동영상분석(kaggle –효율이 제일 좋다)
2.알고리즘 트레이딩(algorithm trading)
=market의 micro structure 를 이해해서 알고리즘화
==order flow 조정, real time cancel/order 기능
3.AI
=AI 시대는 분명히 도레한다
=인간을 대체할까? NO, 인간이 해야할 일은 있을것이다
4.Block chain
=화폐 시대의 개혁의 바람이 될수도 있다
==미국의 움직임을 주시해야 하는 분야
2020년 5월 8일 금요일
Day_07. EMH & behavior finance
Today discuss point
1 Bigdata 를 이용한 가격 결정
==삼성전자의 내년도 가격은 어떻게 되는가?
==동학개미운동이 의미(investment wise)가 있는건가?
2 자산 가격에 관련해서 알아야할 사항은 무었이 있는가? 기본 틀은 무엇 일까?
3 최근의 논의 방법론은 어떤 것이 있는가?
EMH – Efficient Market Hypothesis
==세상 누구도 공짜 점심은 없다
==어떤 수익을 실현했다면 위험을 감수한 결과이다
관계 모형
\\Mean Variance Frontier 위험 분산 전략
\\CAPM (Capital Asset Pricing Model)에서의 위험 = 1factor = 시장 지수의 수익율
\\3Factor model = risk factor 3개 = 시장 위험(KOSPI) ,firm size (capsize 소,중,대), PBR(청산가치, 안전성의 역수)
\\5 Factor Model = 위의 3개 factor + 투자 + ROE(수익율)
\\C-CAPM (Consumption CAPM) 1980~2000년도에 연구된 분야
\\자산 가격의 결정 = 내가 저축시 내년도 소득이 얼마나 안정적으로 보장 되는가?
===오늘의 한계 효용과 내년도의 한계 효용간에 일정한 비율을 유지하는게 중요
\\특별히 설계된 효용 함수를 사용해서 설명
===해석이 가능하고 수학적 SOLUTION 모듈이 된다
\\Henson (1990), Hanson and jaganathan(1993) Cochrane(1997) : 이후 가격 결정 모델(asset pricing model) 은 없음
\\실증(empirics)
===수익율이 100% 변동->시장 수익율 70% ->3factor에서는 77% 전후 변동
행동 금융학(behavior finance)
\\Heuristic(발견적 분석) 분석의 허점
==투자자들이 생각보다 rational 하지 않다
\\shiller 와 thaler 이론
==irration exuherrance ; animal spirits – 동물적 직감? ; narrative economics
\\prospect theory
==투자자들이 현재 가격에서 +1% -1% 가 되는 경우 투자자들이 느끼는 행복의 양은 다르다, +1%일 때 100의 행복감이라면 -1%의 상황에서는 -200의 감정을 느낀다
==투자시 마이너스 수익(손해) 에 대한 아픔이 크기 때문에 왠만한 수익을 보장하지 못하면 위험자산을 매입하지 않는다
행태주의 금융
\\당연 하겟지만 시장에는 “합리적인 투자자” 와 “비 합리적인 투자자” 가 존재한다
\\비 합리적 투자자의 정의
====noise trader , 투자 모형이 부적합 하거나 정보에서 열위에 있는사람
향후 살펴 봐야할 핵심 연구방향
1 rumer를 어떻게 측정하고 가격에 반영할 것인가
==신문 1면에 나온 공포/ 희망 뉴스에 의존할 것인가
==twitter/fb/instagram 의 사진이 시장의 상황을 설명 가능한가?
2 자연어 처리
==IMF의 연구방향, TEXT BLOB
==sentiment(spark : 자연어 처리)
==spacy – 자연어 처리를 도와주는 오픈소스 환경
3 자연어 처리의 강자들
=google/FB/MSFT를 이용한 딥러닝 라이브러리
==이를 활용한 음성인식, 번역, 자율 자동차 시대
행태주의 – 금융지표에서 알아야 하는 것
1 도움이 되는가
2 어떤 지표를 많이 사용하는가
3 왜 사용하는가
4 어떤 경제학적 직관(INSIGHT)를 찾을수 있는가
**금융시장에서의 생존법**
1 Mean variance frontier
==새로운 대안이 될수 없다
2 automatic betting size / order
==자동화 거래를 통한 개인의 감정을 배제한 거래
3 매매의 기준 설정
==남이 아닌 “나의 수익율” 을 기준으로 설정
4 손/익 절에서 목표가격의 설정
==평균적 수익률을 가능캐 한다
5 초기에는 낮은 비율의 자산 매입
==자기 자산의 최대 30% 이내로 매입하라
6 점진적으로 목표로 하는 수익 달성시 매입 비중을 늘려라
==절대로 손절 라인에서 매입 비율을 높이면 안된다
7 Mlearing 의 metal laheling 기법 사용
**유명 투자자의 명언**
워랜 버핏
=튼튼한 기반이 있으나 사람들이 좋아하지 않는 종목을 사라
==저평가된 주식에서 가치를 찾아라
=beat the market의 전략은 “복리의 마법” 이다
벤저민 그레이엄의 투자 원칙
회사 규모 =연매출 1억 USD 이상
재무상태 =유동비율 200%이상
과거 20년간 지속적 배당
과거 10년간 적자가 없는회사
10년간 EPS의 1/3이상 성장
PER 15배 이하
PBR 1.5배 이하
1 Bigdata 를 이용한 가격 결정
==삼성전자의 내년도 가격은 어떻게 되는가?
==동학개미운동이 의미(investment wise)가 있는건가?
2 자산 가격에 관련해서 알아야할 사항은 무었이 있는가? 기본 틀은 무엇 일까?
3 최근의 논의 방법론은 어떤 것이 있는가?
EMH – Efficient Market Hypothesis
==세상 누구도 공짜 점심은 없다
==어떤 수익을 실현했다면 위험을 감수한 결과이다
관계 모형
\\Mean Variance Frontier 위험 분산 전략
\\CAPM (Capital Asset Pricing Model)에서의 위험 = 1factor = 시장 지수의 수익율
\\3Factor model = risk factor 3개 = 시장 위험(KOSPI) ,firm size (capsize 소,중,대), PBR(청산가치, 안전성의 역수)
\\5 Factor Model = 위의 3개 factor + 투자 + ROE(수익율)
\\C-CAPM (Consumption CAPM) 1980~2000년도에 연구된 분야
\\자산 가격의 결정 = 내가 저축시 내년도 소득이 얼마나 안정적으로 보장 되는가?
===오늘의 한계 효용과 내년도의 한계 효용간에 일정한 비율을 유지하는게 중요
\\특별히 설계된 효용 함수를 사용해서 설명
===해석이 가능하고 수학적 SOLUTION 모듈이 된다
\\Henson (1990), Hanson and jaganathan(1993) Cochrane(1997) : 이후 가격 결정 모델(asset pricing model) 은 없음
\\실증(empirics)
===수익율이 100% 변동->시장 수익율 70% ->3factor에서는 77% 전후 변동
행동 금융학(behavior finance)
\\Heuristic(발견적 분석) 분석의 허점
==투자자들이 생각보다 rational 하지 않다
\\shiller 와 thaler 이론
==irration exuherrance ; animal spirits – 동물적 직감? ; narrative economics
\\prospect theory
==투자자들이 현재 가격에서 +1% -1% 가 되는 경우 투자자들이 느끼는 행복의 양은 다르다, +1%일 때 100의 행복감이라면 -1%의 상황에서는 -200의 감정을 느낀다
==투자시 마이너스 수익(손해) 에 대한 아픔이 크기 때문에 왠만한 수익을 보장하지 못하면 위험자산을 매입하지 않는다
행태주의 금융
\\당연 하겟지만 시장에는 “합리적인 투자자” 와 “비 합리적인 투자자” 가 존재한다
\\비 합리적 투자자의 정의
====noise trader , 투자 모형이 부적합 하거나 정보에서 열위에 있는사람
향후 살펴 봐야할 핵심 연구방향
1 rumer를 어떻게 측정하고 가격에 반영할 것인가
==신문 1면에 나온 공포/ 희망 뉴스에 의존할 것인가
==twitter/fb/instagram 의 사진이 시장의 상황을 설명 가능한가?
2 자연어 처리
==IMF의 연구방향, TEXT BLOB
==sentiment(spark : 자연어 처리)
==spacy – 자연어 처리를 도와주는 오픈소스 환경
3 자연어 처리의 강자들
=google/FB/MSFT를 이용한 딥러닝 라이브러리
==이를 활용한 음성인식, 번역, 자율 자동차 시대
행태주의 – 금융지표에서 알아야 하는 것
1 도움이 되는가
2 어떤 지표를 많이 사용하는가
3 왜 사용하는가
4 어떤 경제학적 직관(INSIGHT)를 찾을수 있는가
**금융시장에서의 생존법**
1 Mean variance frontier
==새로운 대안이 될수 없다
2 automatic betting size / order
==자동화 거래를 통한 개인의 감정을 배제한 거래
3 매매의 기준 설정
==남이 아닌 “나의 수익율” 을 기준으로 설정
4 손/익 절에서 목표가격의 설정
==평균적 수익률을 가능캐 한다
5 초기에는 낮은 비율의 자산 매입
==자기 자산의 최대 30% 이내로 매입하라
6 점진적으로 목표로 하는 수익 달성시 매입 비중을 늘려라
==절대로 손절 라인에서 매입 비율을 높이면 안된다
7 Mlearing 의 metal laheling 기법 사용
**유명 투자자의 명언**
워랜 버핏
=튼튼한 기반이 있으나 사람들이 좋아하지 않는 종목을 사라
==저평가된 주식에서 가치를 찾아라
=beat the market의 전략은 “복리의 마법” 이다
벤저민 그레이엄의 투자 원칙
회사 규모 =연매출 1억 USD 이상
재무상태 =유동비율 200%이상
과거 20년간 지속적 배당
과거 10년간 적자가 없는회사
10년간 EPS의 1/3이상 성장
PER 15배 이하
PBR 1.5배 이하
2020년 4월 28일 화요일
Day_05. Data collect using python
1.data download / save using python
2.daily dow 30개 종목의 plotting 해보기
Python data file
== save method =Csv, excel, pickle, parquet …
==CSV file – 컴마(,)로 구분되어진 데이터 파일
==memory 사용율
===excel= csv – pickle – parquet 순서로 메모리를 많이 사용한다
**이 장에서 중요한점**
데이터의 수집방안 탐색
에러확인
NaN data제거 등의 data의 정제 & 가공
시각화
**시각화가 중요한 이유는 데이터의 변동성을 확인하기 좋기 때문이다
가상의 data를 만드는 예시 –사용이 권장되지는 않음, 쓸모를 모르겟음
import pandas.util.testing as tm
tm.makeTimeDataFrame()
2.daily dow 30개 종목의 plotting 해보기
Python data file
== save method =Csv, excel, pickle, parquet …
==CSV file – 컴마(,)로 구분되어진 데이터 파일
==memory 사용율
===excel= csv – pickle – parquet 순서로 메모리를 많이 사용한다
**이 장에서 중요한점**
데이터의 수집방안 탐색
에러확인
NaN data제거 등의 data의 정제 & 가공
시각화
**시각화가 중요한 이유는 데이터의 변동성을 확인하기 좋기 때문이다
가상의 data를 만드는 예시 –사용이 권장되지는 않음, 쓸모를 모르겟음
import pandas.util.testing as tm
tm.makeTimeDataFrame()
2020년 4월 15일 수요일
Day_04. Pandas Group by
Pandas의 group by
------------------------------------------
Term paper
-group member 정보는 email로 송부, member간 CP 은 조원들끼리 공유
-주중/주말 간 메신저를 통한 면담 실시
-term paper 대상
--자료의 종류
===상관없음
--사용 방법론
===경제학 범주 내에서 가능한만큼
Ex)특정 이벤트(사스,에볼라,코로나 등)이 시장에 미치는 영향은 예측이 가능한가
----No 예측은 불가능하다, 시장은 예측의 영역이 아닌 대응의 영역이다
----시장은 효율성과 비 효율성의 중간 지점에서 동작한다
To-do
1)논지의 설정 –시장에서 xxx현상을 예측하겟다
2)자료의 download
3)자료 정리
4)상관관계 분석
-------------------------------------------------------
왜 사용할까?
– avoid loop = loop 상황을 피하는게 전체 메모리 사용에 좋기 때문
- 컴퓨터 사이언스와 다르게 쉬운 방법으로 데이터를 가지고 원하는 논리를 검증하기 위해
Pandas의 group by = 해당 data set에서 기준을 잡고 해당 기준 안에서 추가 연산을 진행
Group by의 aggregate , filter , transform 사용
예시를 위해 seaborn 에서 planets 데이터를 호출한다
import numpy as np
import pandas as pd
import seaborn as sns
planets = sns.load_dataset('planets')
planets.shape
== (1035, 6) - 1035건의 데이터와 6개의 column이 있음
planets.head(10)
해당 data의 기본 통계분석
planets.dropna().describe()
해당 data의 item 의 수를 카운트
planets.count()
##planet 데이터의 min(), max(), mean(), std(), var(), mad()를 확인한다 (planets.min())
##Column 정보 확인
planets.columns
= Index(['method', 'number', 'orbital_period', 'mass', 'distance', 'year'], dtype='object')
------------------------------------------
Term paper
-group member 정보는 email로 송부, member간 CP 은 조원들끼리 공유
-주중/주말 간 메신저를 통한 면담 실시
-term paper 대상
--자료의 종류
===상관없음
--사용 방법론
===경제학 범주 내에서 가능한만큼
Ex)특정 이벤트(사스,에볼라,코로나 등)이 시장에 미치는 영향은 예측이 가능한가
----No 예측은 불가능하다, 시장은 예측의 영역이 아닌 대응의 영역이다
----시장은 효율성과 비 효율성의 중간 지점에서 동작한다
To-do
1)논지의 설정 –시장에서 xxx현상을 예측하겟다
2)자료의 download
3)자료 정리
4)상관관계 분석
-------------------------------------------------------
왜 사용할까?
– avoid loop = loop 상황을 피하는게 전체 메모리 사용에 좋기 때문
- 컴퓨터 사이언스와 다르게 쉬운 방법으로 데이터를 가지고 원하는 논리를 검증하기 위해
Pandas의 group by = 해당 data set에서 기준을 잡고 해당 기준 안에서 추가 연산을 진행
Group by의 aggregate , filter , transform 사용
예시를 위해 seaborn 에서 planets 데이터를 호출한다
import numpy as np
import pandas as pd
import seaborn as sns
planets = sns.load_dataset('planets')
planets.shape
== (1035, 6) - 1035건의 데이터와 6개의 column이 있음
planets.head(10)
해당 data의 기본 통계분석
planets.dropna().describe()
해당 data의 item 의 수를 카운트
planets.count()
##planet 데이터의 min(), max(), mean(), std(), var(), mad()를 확인한다 (planets.min())
##Column 정보 확인
planets.columns
= Index(['method', 'number', 'orbital_period', 'mass', 'distance', 'year'], dtype='object')
2020년 4월 2일 목요일
Day_03. Numpy & pandas
Why numpy?
--경제 대학원에서 numpy를 사용해야 하는이유?
---데이터 분석의 성능이 기존 R보다 더 뛰어나다
---특정 상황에 대한 modeling에서 더 쉽게 접근이 가능하기때문
---머신러닝에 대한 접근성이 뛰어나다
Black schools option pricing 에서의 numpy
--해당 model에서 numpy가 필요한 부분
----random number generate
--random number 생성시 random state 를 지정해 연산이 지속되고 같은 random number 가 생성된다
수식에서 주목할 부분은 마지막 z값으로 이부분을 random 으로 지정(하지만 state 를 지정했기 때문에 같은 값이 나옴)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
# simulation: normal distribution
rng = np.random.RandomState(123)
rng.standard_normal(10)
S0 = 100 # initial value
r = 0.05 # constant short rate/year
sigma = 0.25 # constant volatility ???
T = 2.0 # in years
I = 10000 # number of random draws
ST1 = S0 * np.exp((r - 0.5 * sigma ** 2) * T
+ sigma * np.sqrt(T) * rng.standard_normal(I))
plt.hist(ST1, bins=50)
plt.xlabel('index level')
plt.ylabel('frequency') plt.grid(True)
***모델의 한계***
연이율 r값과 sigma 값이 고정되어 있는데 이율이 매번 같이 나온다 이상하지 않나?
---맞음, 하지만 해당 모델은 추이를 보기 위함이라 변동성이 너무 많아지면 model 로의 가치가 하락 하기 때문에 통제 시킨거라 보면된다, 쉽게 이해하기 위한 참고 자료로 생각하면좋음
co skewness , co kurtosis ,black swan에 대한 연구
--중요한이유 ,금융시장의 변동성이 빈번하게 일어나기 때문,
--위험을 측정하기 용이함
--상단 붉게 그려진 leptokurtic 의 그래프를 보면 그래프의 형상이 중앙으로 모여있는 콘(corn) 형태
--정규분포보다 더 높은 첨도를 가지는 분포(더 뾰족하다는 이야기)
--정규분포는 3의 첨도를 가지나 leptokurtic은 3이상의 첨도를 가진다
--leptokurtic 분포는 tail 부분이 더 높은 수치를 가지거나 outlier (극단적으로 특이한 값)값을 더 많이 포함하는 경우가 많다
--https://www.investopedia.com/terms/l/leptokurtic.asp 참고하면 좋음
--black swan이란?----예상하지 못한 사태
What is pandas
--데이터의 수집과 분석에서 뛰어난 효율이 나오는 패키지 , 기반은 numpy
--데이터의 handling에서 loop 에 해당하는 명령어를 작성하지 않아도 결과를 산출
Pandas 의 data type 은 2가지
--serise – 1 column 짜리 matrix (행렬)
--data frame – multiple column matrix ,다중 컬럼 행렬
--경제 대학원에서 numpy를 사용해야 하는이유?
---데이터 분석의 성능이 기존 R보다 더 뛰어나다
---특정 상황에 대한 modeling에서 더 쉽게 접근이 가능하기때문
---머신러닝에 대한 접근성이 뛰어나다
Black schools option pricing 에서의 numpy
--해당 model에서 numpy가 필요한 부분
----random number generate
--random number 생성시 random state 를 지정해 연산이 지속되고 같은 random number 가 생성된다
수식에서 주목할 부분은 마지막 z값으로 이부분을 random 으로 지정(하지만 state 를 지정했기 때문에 같은 값이 나옴)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
# simulation: normal distribution
rng = np.random.RandomState(123)
rng.standard_normal(10)
S0 = 100 # initial value
r = 0.05 # constant short rate/year
sigma = 0.25 # constant volatility ???
T = 2.0 # in years
I = 10000 # number of random draws
ST1 = S0 * np.exp((r - 0.5 * sigma ** 2) * T
+ sigma * np.sqrt(T) * rng.standard_normal(I))
plt.hist(ST1, bins=50)
plt.xlabel('index level')
plt.ylabel('frequency') plt.grid(True)
연이율 r값과 sigma 값이 고정되어 있는데 이율이 매번 같이 나온다 이상하지 않나?
---맞음, 하지만 해당 모델은 추이를 보기 위함이라 변동성이 너무 많아지면 model 로의 가치가 하락 하기 때문에 통제 시킨거라 보면된다, 쉽게 이해하기 위한 참고 자료로 생각하면좋음
------참고 자료지만 알아야 하는 것
co skewness , co kurtosis ,black swan에 대한 연구
--중요한이유 ,금융시장의 변동성이 빈번하게 일어나기 때문,
--위험을 측정하기 용이함
--상단 붉게 그려진 leptokurtic 의 그래프를 보면 그래프의 형상이 중앙으로 모여있는 콘(corn) 형태
--정규분포보다 더 높은 첨도를 가지는 분포(더 뾰족하다는 이야기)
--정규분포는 3의 첨도를 가지나 leptokurtic은 3이상의 첨도를 가진다
--leptokurtic 분포는 tail 부분이 더 높은 수치를 가지거나 outlier (극단적으로 특이한 값)값을 더 많이 포함하는 경우가 많다
--https://www.investopedia.com/terms/l/leptokurtic.asp 참고하면 좋음
--black swan이란?----예상하지 못한 사태
What is pandas
--데이터의 수집과 분석에서 뛰어난 효율이 나오는 패키지 , 기반은 numpy
--데이터의 handling에서 loop 에 해당하는 명령어를 작성하지 않아도 결과를 산출
Pandas 의 data type 은 2가지
--serise – 1 column 짜리 matrix (행렬)
--data frame – multiple column matrix ,다중 컬럼 행렬
2020년 3월 30일 월요일
Day_02. Tuple / List / Dict
Tuple/list/dict
Today
1.Tuple/list/dict의 정의.사용처
2.각각의 차이
3.inflating (데이터 삽입) 의 방법은
4.dict에서의
--item 추출
--calling
--reverse
--pandas data가 dict 형태로 제공된다
Tople
--괄호로 이어져있다
--in flating
---데이터의 삽입방법—loop,single line method
----loop : for 문등을 이용, 메모리를 많이 사용
----single line command : pythonic way, less memory, less time
--tuple VS list
----Tuple = less memory
----Named tuple = OOPS
Dictionary
-dictionary 의 depth –depth 가 있는 dict는 메모리는 많이 사용하지만 반복문 만으로 내부 데이터를 찾아갈수 있다
-dictionary access –키와 value를 이용해서 접근한다
numpy
--이점=loop를 사용하지 않고 데이터를 처리하기 쉬운 package
--numpy상에서 array 생성
----dimension의 중요성 == 데이터를 제공하는 패키지에 따라 넘어오는 데이터 전송 방식이 다르기때문에 차원변환이 필요하다
----행렬의 index
----reshape = vstack , hstack – 수직 수평적층등 데이터 조작이 중요하다
Today
1.Tuple/list/dict의 정의.사용처
2.각각의 차이
3.inflating (데이터 삽입) 의 방법은
4.dict에서의
--item 추출
--calling
--reverse
--pandas data가 dict 형태로 제공된다
Tople
--괄호로 이어져있다
--in flating
---데이터의 삽입방법—loop,single line method
----loop : for 문등을 이용, 메모리를 많이 사용
----single line command : pythonic way, less memory, less time
--tuple VS list
----Tuple = less memory
----Named tuple = OOPS
Dictionary
-dictionary 의 depth –depth 가 있는 dict는 메모리는 많이 사용하지만 반복문 만으로 내부 데이터를 찾아갈수 있다
-dictionary access –키와 value를 이용해서 접근한다
numpy
--이점=loop를 사용하지 않고 데이터를 처리하기 쉬운 package
--numpy상에서 array 생성
----dimension의 중요성 == 데이터를 제공하는 패키지에 따라 넘어오는 데이터 전송 방식이 다르기때문에 차원변환이 필요하다
----행렬의 index
----reshape = vstack , hstack – 수직 수평적층등 데이터 조작이 중요하다
Day_01. Class intro
향후 수업 방향
1.팀원 구성 날짜 고정
2.4/14까지 팀과 제목을 제출
3.4/28까지 주제 선정
4.쥬피터 노트북에 있는 데이터를 기반으로 해도 괜찮음
중간고사
-쥬피터 노트북의 MIMIC
교제
-렉쳐노트를 보고 모르는걸 질문하기, 추가 레퍼런스 자료는 안봐도 됨
--마르코 로페즈 데 프라도 교제는 방학때 진행할 예정
특징
-쥬피터 노트북의 자료를 모두 머리에 넣는게 목적이 아니다, 어짜피 불가능하고 다른 데이터 셋셋 왔을 때 적용하는 방법을 알면 되는것
사회의 경향
자연어 처리,그래프 이론 -->이번 스텐포드,카네기멜론 졸업자들중 가장 최고 연봉을 찍은 전공들로 이번 수업에서도 중점을 이룸
성적처리
텀페이퍼가 50%이상으로 중요한 부분
1.팀원 구성 날짜 고정
2.4/14까지 팀과 제목을 제출
3.4/28까지 주제 선정
4.쥬피터 노트북에 있는 데이터를 기반으로 해도 괜찮음
중간고사
-쥬피터 노트북의 MIMIC
교제
-렉쳐노트를 보고 모르는걸 질문하기, 추가 레퍼런스 자료는 안봐도 됨
--마르코 로페즈 데 프라도 교제는 방학때 진행할 예정
특징
-쥬피터 노트북의 자료를 모두 머리에 넣는게 목적이 아니다, 어짜피 불가능하고 다른 데이터 셋셋 왔을 때 적용하는 방법을 알면 되는것
사회의 경향
자연어 처리,그래프 이론 -->이번 스텐포드,카네기멜론 졸업자들중 가장 최고 연봉을 찍은 전공들로 이번 수업에서도 중점을 이룸
성적처리
텀페이퍼가 50%이상으로 중요한 부분
2020년 3월 19일 목요일
Day_00. Intro_06
--group by 와 pivot table 의 차이점
----다차원(multi-demention)에서 작동
----data가 있을 때 어떤 기준으로 나누고 각 그룹의 수치의 값을 볼지 결정한다
** Titanic 의 생존자 data를 seaborn 에서 가져와서 실습해보자**
1. seaborn 에서 titanic 생존자 data를 가져오기
2. 성(sex)별생존자 를 계산한다
3. 선실별 등급(class) 과 성별의 생존률의 관계
4. 0,24,60의 나이대 그룹에서 생존 성별,등급
5. 0,24,60 의 나이대 그룹에서의 생존 성별 등급의 평균 좌석별 요금(fare)
6. 생존자의 총합, 요금의 평균값을 생성
seaborn 에서 titanic 생존자 data를 가져오기
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
plt.style.use('seaborn')
titanic = sns.load_dataset('titanic',engine='python')
titanic
성(sex)별생존자 를 계산한다
titanic.groupby('sex')[['survived']].mean()
선실별 등급(class) 과 성별의 생존률의 관계
titanic.groupby(['sex','class'])[['survived']].mean()
---row base로 옆으로 펼친다
titanic.pivot_table('survived', index='sex', columns='class')
--3개의 그룹상황에서의 pivoting
age_div = pd.cut(titanic['age'],[0,24,60])
--원하는 나이 구간을 위해 생성한다
titanic.pivot_table('survived',['sex','age'],'class')
--age라는 column으로만 pivoting 할 때 상황
--위에서 선언한 age_div를 이용해 구간을 적용함
--2개의 multi group 이 필요함
age_div = pd.cut(titanic['age'],[0,24,60])
fare_div = pd.qcut(titanic['fare'],2)
titanic.pivot_table('survived',['sex',age_div],['class',fare_div])
titanic.pivot_table(index='sex',columns='class',aggfunc={'survived':sum,'fare':np.mean})
Day_00. Intro_05
Pandas groupy by 기능
-많은 data의 반복작업에 중요함
-column indexing 을 groupby에 사용하면 편리함
-Loop 를 사용하지 않고 group by를 사용하면 대용량 데이터 처리도 빠르게 할 수 있음
**seaborn package를 이용해서 실습**
--seaborn 이란? - python에서 matplotlib를 기반으로 만든 데이터 시각화 데이터셋
import numpy as np
import pandas as pd
import seaborn as 눈
planets = sns.load_dataset('planets')
planets.shape
---seaborn 에서 planets 데이터셋을 불러온다
planets.head(1000)
planets.tail()
--head와 tail을 이용해 data를 살펴본다
planets.count()
planets.groupby('method')['year'].describe()
planets.groupby('method')['year'].describe()
Filtering
--group by의 결과에서 특정조건에 맞는 data만 가져다가 사용 가능하게 하는 것
Apply
--groupby에서 결과에서 적용하는 특정값을 지정하는 것
**언제 apply, aggregate, filter, transform을 사용 해야하나**
--aggregate – 각 그룹의 단일값 사용
--filter row의 subset을 취할 때
--transform 각 row에 새로운 값을 넣을때
-많은 data의 반복작업에 중요함
-column indexing 을 groupby에 사용하면 편리함
-Loop 를 사용하지 않고 group by를 사용하면 대용량 데이터 처리도 빠르게 할 수 있음
**seaborn package를 이용해서 실습**
--seaborn 이란? - python에서 matplotlib를 기반으로 만든 데이터 시각화 데이터셋
import numpy as np
import pandas as pd
import seaborn as 눈
planets = sns.load_dataset('planets')
planets.shape
---seaborn 에서 planets 데이터셋을 불러온다
planets.head(1000)
planets.count()
planets.max()
---min(),mean(),std,var,mad() 등의 옵션이 가능함,
planets.columns
-- Index(['method', 'number', 'orbital_period', 'mass', 'distance', 'year'], dtype='object')
-----해당 dataset의 column의 이름을 추출해서 보여줌
Groupby를 이용한 column indexing
-- planets.groupby('method').groups
planets.columns
-- Index(['method', 'number', 'orbital_period', 'mass', 'distance', 'year'], dtype='object')
-----해당 dataset의 column의 이름을 추출해서 보여줌
Groupby를 이용한 column indexing
-- planets.groupby('method').groups
--group by의 결과에서 특정조건에 맞는 data만 가져다가 사용 가능하게 하는 것
Apply
--groupby에서 결과에서 적용하는 특정값을 지정하는 것
**언제 apply, aggregate, filter, transform을 사용 해야하나**
--aggregate – 각 그룹의 단일값 사용
--filter row의 subset을 취할 때
--transform 각 row에 새로운 값을 넣을때
Day_00. Intro_04
Pandas concatenation
-pandas 에서 data frame의 combine 방법론
-기존 data에 새로운 data를 추가해서 붙히는 방법
-다른 데이터 소스에서의 데이터 병합, ex)quendl 과 yahoo 데이터등을 합칠 때
**암기가 아닌 응용력이 중요, 어떤 상황에서 어떤 문법을 사용할지 선택 하는게 중요**
import pandas as pd
import numpy as np
--x=[1,2,3]
--y=[4,5,6]
--np.concatenate([x,y]) ---array([1, 2, 3, 4, 5, 6]) #concatenate 를 full 로 작성해준다
**numpy에서는 concatenate 로 작성한다**
x=np.arange(1,7).reshape(2,3)
z=np.array([7,8,9]
---x를 1~6까지 2행 3열로 생성, z는 단일행 행렬로 7,8,9를 지정
np.vstack([x,z])
---array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
----vstack 을 이용해 x의 행렬 인 2행 3열에 맞게 z의 원소를 이어 붙힌다
Dataframe 의 축변환, (axis parameter를 이용하기)
-np.concatenate([x,x],axis=0)
--array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
-np.concatenate([x,x],axis=1)
--array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
--axis 가 0일때는 아래로 데이터를 연결, 1일때는 옆으로 이어붙힌다
Pandas 의 Merge
--공통된 항목ex)column name 이 있을 때 사용하기
--index 값으로의 concat 은 merge 기능이 좋다
x1=pd.Series(['A','B','C'],index=list('123'))
x2=pd.Series(['D','E','F'],index=list('123'))
x3=pd.concat([x1,x2])
x3
1 A
2 B
3 C
1 D
2 E
3 F
x3['1']
1 A
1 D
--pandas 에서는 concat 키워드를 사용해서 데이터를 붙힌다
--이때 index 가 이름이 중복되어있어도 상관없이 붙히는 것을 알수있음
--concat 된 데이터에 접근할 때 index의 이름을 1로 지정하면 같은 index로 지정된 데이터가 나옴
Merge- 다른 column 이름이나 원소의 개수가 같을 때 사용한다
--2개의 DataFrame 을 생성해서 merge 하기
df1=pd.DataFrame({'employee':['Bob','Jake','Lisa','Sue'],
'group':['Accounting','Engineering','Engineering','HR']})
df2=pd.DataFrame({'employee':['Lisa','Bob','Jake','Sue'],
'hire_date':[2004,2008,2012,2014]})
--2개의 dataframe 을 merge 한다
---pd.merge(df1,df2 , on='employee')
---이때 merge의 기준이 되는 column을 적어주면 혼잡도를 줄일수 있다
SQL 에서 Left outer join 기능 효과
df1=pd.DataFrame({'employee':['Bob','Jake','Lisa','Sue'],
df2=pd.DataFrame({'name':['Lisa','Bob','Jake','Sue'],
'salary':[10000,20000,30000,40000]})
display(df1,df2)
--dataframe 의 column이름이 다르고 추가된 항목도 있음
--2개의 dataframe 을 동시에 보기위해서 어떤 merge를 해야할까?
--pd.merge(df1,df2, left_on='employee',right_on='name')
문제점이 있는데 employee와 name 은 column이름만 다르고 내부 data는 같다
--pd.merge(df1,df2, left_on='employee',right_on='name').drop('name',axis=1)
--drop을 이용해서 중복되는 column을 제거하고 axis=1을 이용한다, 이때 axis를 사용하지 않으면 에러가 발생한다
Index를 따로 이름을 지정해서 표시하기
df1a=df1.set_index('employee')
df2a=df2.set_index('employee')
display(df1a,df2a)
이 상황에서 merge는 어떻게 해야할까?
--pd.merge(df1a,df2a)
-pandas 에서 data frame의 combine 방법론
-기존 data에 새로운 data를 추가해서 붙히는 방법
-다른 데이터 소스에서의 데이터 병합, ex)quendl 과 yahoo 데이터등을 합칠 때
**암기가 아닌 응용력이 중요, 어떤 상황에서 어떤 문법을 사용할지 선택 하는게 중요**
import pandas as pd
import numpy as np
--x=[1,2,3]
--y=[4,5,6]
--np.concatenate([x,y]) ---array([1, 2, 3, 4, 5, 6]) #concatenate 를 full 로 작성해준다
**numpy에서는 concatenate 로 작성한다**
x=np.arange(1,7).reshape(2,3)
z=np.array([7,8,9]
---x를 1~6까지 2행 3열로 생성, z는 단일행 행렬로 7,8,9를 지정
np.vstack([x,z])
---array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
----vstack 을 이용해 x의 행렬 인 2행 3열에 맞게 z의 원소를 이어 붙힌다
-np.concatenate([x,x],axis=0)
--array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
--array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
--axis 가 0일때는 아래로 데이터를 연결, 1일때는 옆으로 이어붙힌다
--공통된 항목ex)column name 이 있을 때 사용하기
--index 값으로의 concat 은 merge 기능이 좋다
x1=pd.Series(['A','B','C'],index=list('123'))
x2=pd.Series(['D','E','F'],index=list('123'))
x3=pd.concat([x1,x2])
x3
1 A
2 B
3 C
1 D
2 E
3 F
x3['1']
1 A
1 D
--이때 index 가 이름이 중복되어있어도 상관없이 붙히는 것을 알수있음
--concat 된 데이터에 접근할 때 index의 이름을 1로 지정하면 같은 index로 지정된 데이터가 나옴
--2개의 DataFrame 을 생성해서 merge 하기
df1=pd.DataFrame({'employee':['Bob','Jake','Lisa','Sue'],
'group':['Accounting','Engineering','Engineering','HR']})
df2=pd.DataFrame({'employee':['Lisa','Bob','Jake','Sue'],
'hire_date':[2004,2008,2012,2014]})
---pd.merge(df1,df2 , on='employee')
---이때 merge의 기준이 되는 column을 적어주면 혼잡도를 줄일수 있다
SQL 에서 Left outer join 기능 효과
df1=pd.DataFrame({'employee':['Bob','Jake','Lisa','Sue'],
'group':['Accounting','Engineering','Engineering','HR']})
df2=pd.DataFrame({'name':['Lisa','Bob','Jake','Sue'],
'salary':[10000,20000,30000,40000]})
display(df1,df2)
--dataframe 의 column이름이 다르고 추가된 항목도 있음
--2개의 dataframe 을 동시에 보기위해서 어떤 merge를 해야할까?
--pd.merge(df1,df2, left_on='employee',right_on='name')
문제점이 있는데 employee와 name 은 column이름만 다르고 내부 data는 같다
--pd.merge(df1,df2, left_on='employee',right_on='name').drop('name',axis=1)
df1a=df1.set_index('employee')
df2a=df2.set_index('employee')
display(df1a,df2a)
--pd.merge(df1a,df2a)
#두개의 dataframe 은 공통된 column이 없어서 merge가 작동하지 않음
pd.merge(df1a, df2a, left_index=True, right_index=True)
--left_index , right_index
pd.merge(df1a, df2a, left_index=True, right_index=True)
--left_index , right_index
2020년 3월 18일 수요일
Day_00. Intro_03
Pandas 소개(Introduction)
numpy에서 파생된 package
data에 label 가능
소실 data 핸들링
Data grouping
Data pivoting
설치방법
--pip install pandas
--conda install –c conda-forge
pandas
데이터 관리 방법
--serise=1개의 column
--data
frame= 여러 개의 column 관리
시계열 데이터 생성 예시
-import
pandas.util.testing as tm
-df_mock
=tm.makeTimeDataFrame()
-df_mock.head(5)
series –단일행 column data- 생성하기
import
numpy as np
import
pandas as pd
a =
['a','b','c']
x =
[1,2,3]
ds=pd.Series(x,index=a)
ds
b 2
c 3
dtype: int64
--Serise 로
생성할 때 데이터로 지정할 행을 앞에, index로 사용할 행을 뒤에
index 키워드로 지정한다, 이때 복수의 column을 data 행으로 지정하면
TypeError: __init__() got multiple values for argument 'index'
가 발생한다
series –단일행 column data- 접근하기
ds['a'] #index 첫번째 항목 지정
ds['a':'c'] #index a항목부터 c항목까지
ds[0:2] #index 번호로 0번부터 지정
dataframe-복수행 column data- 생성
ps1=pd.Series(data=[11,22,33],index=['a','b','c'])
ps2=pd.Series(data=[55,66],index=['d','f'])
ps1a 11
b 22
c 33
dtype: int64
ps2d 55
f 66
dtype: int64
==ps1,2 로
이루어진 series data 를 2개 생성한다
agg=pd.DataFrame([ps1,ps2])
agg
==agg 로
생성한 dataframe 이 2개의 series를 묶어준다
---------------------------------------------------------------------------------------
Yahoo finance 의 정보를 가져와서 활용해보기
Yahoo finance 정보를 가져오는 packages를 설치해야 할수있다
1.anaconda navigator 를 open하고 두번째 environments tab에서 rootàopen terminal 을 클릭
2.pip install yfinance –upgrade –no-cache-dir
을 입력해서 설치한다
**cmd에서 pip 으로
설치하면 SSL 에러가 발생하는 경우가 많기 때문에 Anaconda
navigator 로 설치하면 편함
import yfinance as yf #yahoo 정보를 가져 오기
위해 import 한다
data = yf.download("TSLA",
start='2010-01-01') #Tesla 의 data를 2010-01-01부터 취득
data.head()
data.to_csv("TSLA_2010-01-01.csv")
#데이터를 csv파일로 저장한다, jupyter
notebook 시작 경로에 저장됨
data.index.weekday #weekday를 기준으로 index를 잡음,month 도 가능
2, 3, 4, 0, 1, 2, 3, 4, 0, 1],
dtype='int64', name='Date', length=2446)
DataFrame 생성
-Series 키워드 명시
--pd.DataFrame({'A':pd.Series([1,2,3]),'B':pd.Series([5,6,7])})
-Series 키워드 비명시
--pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
-기존 생성한 Series 를 이용한
DataFrame 생성
--pd.DataFrame({'A':ps1,'B':ps2})
DataFrame에 Access
--DataFrame 생성
-df=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]},index=[2017,2018,2019])
-df
--Series이름을 통한 Access
-df['A']
--DataFrame 을 통한 Access
-df[['A']] #[]를 2개 사용하면 DataFrame 으로 판단된다
--Index 이름의 직접 명시
-df.loc[2017] #loc를 이용하면 해당 index이름을 직접
지정해서 접근이 가능함
--index의 번호를 지정해서 접근, -1은 맨뒤에 있는 항목
-df.iloc[:,0]
-df.iloc[:,-1]
DataFrame Renaming 방법 –column & index 의 re-naming
-df.columns = ['z', 'k']
Df
Homework
--Financial data download and manipulations
---1.data download
---2.close and close-return plotting
---3.correlation among downloaded data
import yfinance as yf
demo=yf.download("AMZN",start='2010-01-01')
demo
2020년 3월 17일 화요일
Day_00. Intro_02
Numpy
stochastic process
Numpy, pandas, matplotlib, seaborn 등 package import후 실습 수행
시뮬레이션이란?-경제학등의 모형에서
과거 data가 있을 때 미래를 추정하는 것
Geometric
Brownian Motion
--이 장의 중점
----geometric Brownian motion 의 수식을 numpy로 가져와서 분석해보기
--적용예시
----xx기업의 주사= 기존 예측 성장세 + 기대하지 않은 변동성 값,(국제정세등으로 변하는 알수 없는 값)
Black-scholes-merton model 의 구현
수식을 기반으로 numpy 를 이용한 구현
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
rng = np.random.RandomState(123)
T = 2 # years
r = 0.05 #constant short rate
sigma = 0.25 #constant volatility
S0 = 100 #initial value
I = 1000 # number of random draws
M = 50
dt = T / M
S = np.zeros((M+1,I))
S[0] = S0
for t in range(1 , M+1 ):
S[t] = S[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt
+ sigma * np.sqrt(dt) * rng.standard_normal(I))
plt.hist(S[-1], bins=50)
plt.xlabel('index level')
plt.ylabel('frequency')
plt.plot(S[:,:10],lw=1.5)
plt.xlabel('time')
plt.ylabel('index level')
plt.grid(True)
나중에 추가로 해보면 좋은 것
-Stochastic volatitiy model
--변동성이시간에따라 변할 때 사용되는 모델로 20년전에 이론이 확립되어 사용중인 모델
-Option model
피드 구독하기:
글 (Atom)















