-
(OpenAPI)ChatGPT OpenAPI 사용: 데이터 분석(KOSPI200지수 예측)금융퀀트/프로그램기초 2023. 3. 29. 07:16반응형
분석용 데이터 준비
챗GPT에 데이터에 관련된 사항을 물어보면 불가능하다는 답변이 나온다.
하지만 우리가 데이터를 넣어주기만 한다면 그 분석 자체는 가능할 것이다. 그럼 챗GPT에게 코스피 200 지수 데이터를 넣고 분석을 시켜보자. 아래와 첨부된 것과 같이 "2020-01-02" ~ "2023-02-28" 약 3년 치 코스피 200 지수 데이터를 넣어줄 것이다.
데이터 수집
KRX 정보데이터시스템 활용
코스피 200 지수 데이터는 KRX 정보 시스템 통계 -> 기본통계 -> 주가지수 -> 개별지수 시세추이 에서 "코스피 200"을 검색해서 다운로드하면 구할 수 있다.
엑셀로 데이터 편집이 가능하다면, 다운로드 후 위에 업로드한 파일처럼 종가만 남기고 나머지 컬럼을 모두 삭제해 주면 된다. 그리고 챗GPT 가 인식을 쉽게 하기 위해서 한글이 있는 부분을 영어로 바꿔주는 것이 좋다.
공공데이터 포털 OPEN API 이용하는 방법
(OpenAPI)DATA.GO.KR(공공데이터포털): 인증키 발급 글을 참조하여 공공데이터 포털에서 API 키를 발급받고, (OpenAPI)DATA.GO.KR: OpenAPI로 데이터 추출 python 글을 참조하여 python에서 OpenAPI로 정보를 추출해도 된다. 아래 코드는 위에 업로드한 csv 파일을 만들어내는 python 예시 코드이다.
from bs4 import BeautifulSoup import requests import pandas as pd # 빈 데이터 프레임 만들기 data=[] # pandas 로 영업일자 범위 만들기 date_range = pd.bdate_range(start='2020-01-02', end='2023-02-28') # 날짜형식을 YYYYMMDD로 변경 business_days = [d.strftime('%Y%m%d') for d in date_range] # api 검색값 중 코스피 200 index 값 idxname = "코스피%2020" # api에 bdate 에 해당하는 index 값을 가지는 데이터를 가져오는 함수 def getDayInfo(idxname,bdate): try: # xml 데이터 표시 row 수 rows = "10000" # 공공데이터 포털 api 접근 기본 url url = "https://apis.data.go.kr/1160100/service/GetMarketIndexInfoService/getStockMarketIndex?serviceKey=" # 내가 발급받은 api 키 & 변수로 index 값과 bdate 입력 myapikey = "나의 api 키" + "&idxNm={}0&basDt={}".format(idxname,bdate) # OpenAPI 데이터 request res = requests.get(url+myapikey) res.raise_for_status() # xml 데이터 객체화 soup = BeautifulSoup(res.text, "xml") # 각 item 묶음들을 items 변수에 넣기 items = soup.find_all("item") return items except: pass for business_day in business_days: # 위에서 정의한 getDayInfo 함수로 items 변수 구성 items = getDayInfo(idxname, business_day) # items 객체가 null 이 아니고 뭐가 값이 있으면 기준일, 코스피200, 종가 로 데이터프레임 구성 if items is not None and len(items) > 0: for item in items: basdt = item.find("basDt").text idxnm = item.find("idxNm").text clpr = item.find("clpr").text subdf = [basdt,idxnm, clpr] data.append(subdf) # 데이터 프레임 컬럼 지정 df = pd.DataFrame(data,columns=["basedate", "indexname", "closingprice"]) # indexname 컬럼 코스피 200 돼 있는 것 영어로 KOSPI200 으로 바꾸기 df['indexname'] = "KOSPI200" # index 컬럼 컬럼명 index 로 부여 df.index.name = "index" # csv 파일로 변환 df.to_csv('csv 파일 저장 경로')
AI에 데이터 분석 시키기: 코스피 200 지수예측
python에서 API 활용하는 방식은 (OpenAPI)ChatGPT OpenAPI 사용: 기본활용 예제(python)에서 보여준 것과 동일하다. 나의 API 키를 확인하고, 모델 엔진과 추가 설정 사항을 확인한 뒤 openai 라이브러리의 Completion의 create 함수를 사용하면 된다. 다만, 질문변수에(prompt) 불러온 데이터를 넣어주면 데이터 분석까지 시킬 수 있다. 각자 만들어서 저장한 csv 파일을 df라는 변수에 저장한 뒤 아래와 같이 질문에 포함시키면 된다.
import openai import pandas as pd def question_gpt(prompt): # OpenAI API 를 이용한 질문요청 response = openai.Completion.create( # 모델엔진 engine=model_engine, # 질문내용 prompt=prompt, # 답변 최대 구절수 max_tokens=500, # 답변 개수 n=1, # 응답 생성을 중단할 문자열 stop=None, # 창의성: 작을수록 보수적이고 클수록 창의적 temperature=0.5, ) print(response.choices[0].text) # 나의 openai api 키 openai.api_key = "나의 API 키" # 내가 사용할 ai 모델 엔진명 model_engine = "text-davinci-003" # csv 파일 불러오기 df = pd.read_csv('chat_data.csv') # 질문내용: {} 에 df 를 넣어서 데이터를 포함시킴 prompt = "I have attached data here {}. Explain the data and tell me what this data suggetst".format(df) # 위에서 정의한 question_gpt 함수에 질문을 넣어서 실행 question_gpt(prompt)
위 코드를 실행시키면 아래와 같은 분석 결과를 얻을 수 있다.
같은 방법으로 챗GPT에게 시계열 분석을 시켜서 미래 KOSPI200 지수 추이를 예측할 수도 있다.
같은 방식으로 과거 데이터를 예측하게 하고 실제 값과 비교해 보면서 챗GPT의 예측의 정확도를 측정해 보는 것도 가능할 것이다.
반응형'금융퀀트 > 프로그램기초' 카테고리의 다른 글
파이썬 32비트 환경에서 MYSQL 사용하기:DLL load failed while import _sqlite3 대응 (0) 2023.11.28 파이썬 판다스(pandas) 데이터 합치기 concat&merge 활용 (0) 2023.06.15 (OpenAPI)ChatGPT OpenAPI 사용: 기본활용 예제(python) (0) 2023.03.24 (OpenAPI)ChatGPT OpenAPI 사용: API 키 발급 및 요금 (0) 2023.03.22 (OpenAPI)DATA.GO.KR: OpenAPI로 추출한 데이터 가공 python (0) 2023.03.13