ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (OpenAPI)ChatGPT OpenAPI 사용: 데이터 분석(KOSPI200지수 예측)
    금융퀀트/프로그램기초 2023. 3. 29. 07:16
    반응형

    분석용 데이터 준비

    챗GPT에 데이터에 관련된 사항을 물어보면 불가능하다는 답변이 나온다. 

    그림1: 챗GPT 데이터 분석 질문

    하지만 우리가 데이터를 넣어주기만 한다면 그 분석 자체는 가능할 것이다. 그럼 챗GPT에게 코스피 200 지수 데이터를 넣고 분석을 시켜보자. 아래와 첨부된 것과 같이 "2020-01-02" ~ "2023-02-28" 약 3년 치 코스피 200 지수 데이터를 넣어줄 것이다.

    chat_data.csv
    0.02MB

     

    데이터 수집

    KRX 정보데이터시스템 활용

    코스피 200 지수 데이터는 KRX 정보 시스템 통계 -> 기본통계 -> 주가지수 -> 개별지수 시세추이 에서 "코스피 200"을 검색해서 다운로드하면 구할 수 있다.

    그림1: 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)

    위 코드를 실행시키면 아래와 같은 분석 결과를 얻을 수 있다. 

    그림2: 데이터 분석 결과(하단)

    같은 방법으로 챗GPT에게 시계열 분석을 시켜서 미래 KOSPI200 지수 추이를 예측할 수도 있다.

    그림3: 미래 KOSPI200 지수 예측

    같은 방식으로 과거 데이터를 예측하게 하고 실제 값과 비교해 보면서 챗GPT의 예측의 정확도를 측정해 보는 것도 가능할 것이다.

    반응형
Designed by Tistory.