Road to FinGPT #4

  • #3859971
    kor 96.***.233.115 1137

    Topic 18. 주가전망 매일매일 여러 llm들에게 물어보고 결과를 저장도 하고 싶다. 그래야 얼마나 제대로 예측했는지 나중에 평가해보지.

    목표

    AskLLM.bat AAPL NVDA TSLA

    라고 입력하면 FinGPT를 이용하여 긴 prompt를 생성한 후, gpt-4, gemini pro, claude opus 한테 주가 전망을 물어보고 결과를 잘 저장해두는 게 목표가 되겠습니다.

    원래 FinGPT가 llama2 기반으로 로컬에서 돌긴 하는데 pc가 느린 관계로 응답 속도가 위 상용 서비스들 대비 수십배 느리고 답장 품질도 안 좋아서 걍 수백억원짜리 상용 llm을 몇 센트씩 내고 쓰기로 했습니다.

    이 페이지는 coding 얘기 가득이고 docker 얘기도 가득이라 관심없을 분들 대부분이라 봅니다만, 코딩은 잘 하지만 llm 어떻게 갖다 쓰는지 관심없었던 분들 대상으로 써봅니다. 코딩이 몇 줄밖에 안 되긴 한데 애초에 코딩 못 하시는 분들은 그 문턱 넘기도 어려울 거에요.

    llm 에게 지식을 물어보는 방법을 찾아보면 여러가지가 있는 것 같던데

    1. 브라우저를 이용하여 무료 서비스에 매일 매일 긴 prompt를 넣고 copy paste하여 파일에 저장해둔다
    2. 브라우저를 selenium 이라는 도구로 자동화하여 위의 #1을 반복한다
    3. rest api라는 걸 이용하여 직접 각 llm 서비스에 물어본다
    4. embedding 이라는 api를 이용하여 각 회사/분야마다 다른 새 정보를 llm 에 넣어준 후 검색한다
    5. rag라는 방법론을 이용하여 검색 키워드로 사내 규정집/분야별 지식을 꺼내어 그 꺼낸 문서를 prompt에 같이 입력해준다

    등 여러가지가 검색이 되었고, 이 가운데 #3을 선택하였습니다.

    왜냐 하면, 내가 문서로 쌓아둔 것이 없으므로 참조할 지식이 없어 5번은 해당 사항이 없고, 내가 주입할 새로운 지식도 딱히 없으므로 4번도 해당 사항이 없고, 1번은 몇 번 해보니 손 노가다가 너무 심하고, 2번과 3번을 비교해본 결과 3번의 방법이 매우 간단하였습니다. 그래서 3번을 어떻게 하는지 여기에 써보려고 합니다.

    프롬프트 수정

    여러 llm 공통적으로 적용되는 사항으로, api를 사용하여 결과를 받아 평가를 하는 등의 분석에 사용하려면 답장의 포맷이 자연어이면 안 됩니다. 그래서 FinGPT의 system prompt를 약간 수정하여 아래와 같이 답장의 포맷을 정해줍니다. 상용 llm들이 모두 엄청 똑똑하여, 아래의 요구 사항을 chatgpt 3.5, gpt-4, gemini, copilot, claude 모두 잘 알아들었습니다. 즉 검색하면 json 포맷으로 답이 나옵니다.

    prompt의 첫 부분에 있었던 답장 형식에 대한 요구 사항을 아래와 같이 수정.
    – – – –
    Your answer should be in JSON format as follows:

    {
    “datetime”: “<ISO-8601 datetime in EST>”,
    “positive_developments”: […],
    “potential_concerns”: […],
    “prediction_in_text”: …,
    “analysis”: …,
    “price_pct_change_direction_predicted”: “<UP or DOWN or NEUTRAL>”,
    “price_pct_change_predicted_in_float”: …,
    “price_pct_change_predicted_in_text”: …,
    “target_trading_dates”: [next 5 trading days in ISO-8601 format in the US, not including today]
    }
    – – – —
    이렇게 했더니 json 키와 내용 모두 한국어로 번역이 되는 문제가 생겨서, key는 번역하지 말라고 아래와 같이 프롬프트를 수정해주었따.

    “Provide all your responses in Korean, but keep the keys inside the JSON data in English.”

    이렇게 해두고, 각 llm 서비스를 하나씩 보도록 합니다.

    • kor 96.***.233.115

      OpenAI의 모델 gpt-4에게 pay-as-you-go 결제하고 주가 물어보기

      하나, GPT-4 API를 pay-as-you-go로 사용하기

      1. gemini 한테 그래서 어떻게 하는 거냐고 물어보면 아래 코드 몇 줄 보여준다.
        from openai import OpenAI
        client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
        completion = client.chat.completions.create(
            model="gpt-4-0125-preview", 
            messages=[ {"role": "user", "content": prompt} ] )
        response_str = completion.choices[0].message.content
        
      2. 비용: GPT-4 여러 모델 가운데 제일 최신 (즉 제일 비싼 거) gpt-4-0125-preview로 골랐다.
      3. 몇 번 호출해보니 billing 페이지 숫자가 잘 안 올라간다. 1밀리언 토큰 당 10달러라고. 매일 티커 10개 주가전망 api 문의한다고 하면 몇십 센트나 그 이하 정도 나오는 듯.
      4. 저 OPENAI_API_KEY 어떻게 발급받느냐고 gemini나 copilot 아무한테나 다시 물어보면 절차를 알려준다. 시키는대로 가서 하나 받아서 환경변수에 세팅해준다. 카드결제 5달러 했다. 당분간은 하루에 티커 한두 개씩 호출할 거니까 한두 달 정도 쓸 수 있을 듯.
      5. 저 prompt 변수에 FinGPT가 생성한 긴 프롬프트 문자열을 넣고 이 세 줄 돌리면 response_str에 JSON string이 들어온다.
      6. 결과에서 json 데이터를 잘 잘라서 파일에 저장해 주면 일단 끝.

      둘, GPT-4를 web ui로 사용하는데 pay-as-you-go 결제하기

      1. GPT-4를 사용하려면 월 20불 결제를 해야 하는데, 사실 난 그만큼 많이 GPT-4를 쓸 일이 없어서 결제를 안 했다. 그래도 가끔 쓰고 싶은 때가 있는데 그래서 pay-as-you-go 결제가 나에게 필요하다. 위에서처럼 api키를 받은 후 https://payasyougo-gpt.com/ 에다가 api key를 입력하면 그렇게 사용할 수 있다고 하는데, api 키를 저 서버에 넘겨주는 것 같아서 그렇게는 못 하겠고.
      2. 두번째 수단으로 로컬 서버를 돌리면 되겠지. 그래서 몇 개 open source 프로젝을 찾아보니, 아래 명령으로 소프트웨어를 설치하고 http://localhost:3000으로 접속하면 그렇게 할 수 있었다.
        docker run -d --name chatgptwebui -p 3003:3000 \
        -e OPENAI_API_KEY=$OPENAPI_API_KEY blrchen/chatgpt-minimal
        
    • kor 96.***.233.115

      Gemini의모델 gemini-pro에게 pay-as-you-go 결제하고 주가 물어보기

      하나,

      1. 비용: 현재 https://gemini.google.com/app 여기에서 서비스 되고 있는 모델이름이 gemini-pro 이고, 브라우저로 사용할 때 현재 무료이고,
      2. api로 gemini-pro 모델을 사용하는 것도 무료이다.
      3. gemini 한테 물어보고 시키는대로, API키를 하나 발급받았다. api key는 GOOGLE_API_KEY 환경변수에 저장해주고.
      4. 코드는
        import google.generativeai as genai
        genai.configure(api_key=os.environ['GOOGLE_API_KEY'])
        model = genai.GenerativeModel("gemini-pro")
        response_obj = model.generate_content(prompt)
        response_str = response_obj.text
        
      5. 이렇게 하면 된다고 하여 해보니 잘 된다. response_str 안에 들어 있는 json 데이터를 잘 잘라서 파일에 저장해주었다.

      둘, 로컬에서 web ui 돌리기

      1. gemini가 이미 무료이기 때문에 이걸 로컬로 돌릴 필요는 없지만,
      2. 5월부터 유료가 된다고 하니 그때 가서 웹 UI + pay-as-you-go 결제를 하고 싶으면 아래와 같이 소프트웨어를 docker위에 하나 설치해 로컬 서버를 돌려주면 되겠다.
        docker run --name geminiprochat --restart always -p 3001:3000 -itd \
            -e GEMINI_API_KEY=$GEMINI_API_KEY babaohuang/geminiprochat:latest
        
      3. http://localhost:3000으로 접속하면 chatgpt 비슷한 UI가 나온다. 해보니 잘 된다.
    • kor 96.***.233.115

      Anthropic의 Claude 3 Opus를 pay-as-you-go로 결제하고 주가 물어보기

      1. 비용: 1M 토큰 당, opus 15불, sonnet 3불, haiku 0.25불이라고 한다.
      2. https://claude.ai/chat/ 이 현재 claude-3-sonnet 모델을 사용 중이고, 무료이다.
      3. api로는 제일 비싼 모델 claude-3-opus만 액세스 가능했는데, 8k 입력 호출 당 8센트 과금이 되었다.
      4. 코드는
        import anthropic
        client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"), )
        message = client.messages.create(
        	model="claude-3-opus-20240229",
        	max_tokens=1000,
        	temperature=0.0,
        	system="You are a seasoned stock market analyst.",
        	messages=[ {"role": "user", "content": prompt} ]
        )
        response_str = message.content[0].text
        
      5. 이렇게 해주면 제일 비싼 모델 claude-3-opus-20240229를 호출한다. 콜당 8센트. opus 보다 1/5 비용인 sonnet을 사용해보려고했는데 에러가 나서 안 됐고, opus의 1/60 비용인 haiku를 써보려고 했는데 그것도 에러가 나서 안 됐음.
      6. 더 싼 모델 가운데 동작하는 건 claude-1.3. 가격은 콜당 2센트.
      7. 역시 response_str에 저장된 json 데이터를 잘 잘라서 파일에 저장해주면 된다.
    • kor 96.***.233.115

      Microsoft Bing Copilot은 아직 API가 오픈되지 않아서 잘 안 됐고요.

      웹으로 하는 ai 검색도 다른 llm 서비스 대비 지원되는 질문의 크기가 4000 글자로 제한되는 문제가 있어서, FinGPT 가 생성하는 프롬프트 8k를 다 못 받아들이더라고요. 그래서 Bing Copilot은 포기.

      궁금증을 풀어보기 위해 시작했던 FinGPT 시리즈는 여기서 마무리하겠습니다. 더 llm 에 대해 더 얘기하는 건 이 게시판 용도를 한참 넘는 것 같아서요.

    • 치유마법 140.***.198.159

      흥미롭군요. 과연 얼마나 의미있는 prediction을 할 수 있을까는 두고 봐야겠죠? 오늘 TSLA 1Q sales slip으로 많이 떨어졌던데, 어느 정도 예상하고 있던 것이지만, year-over-year decline이 가시화 됐다는 점에서 의미가 있었던 듯 하군요. 예상은 어땠는지요?

      • kor 96.***.233.115

        주가 prediction 이라고 표현되었지만, 주가를 예측한 게 아니라 그냥 말을 생성한 것이에요.

        temperature, top-k, top-p 라는 파라미터들이 말을 생성하는데 쓰이는 randomness를 결정하는 파라미터인데요.

        지난 주 AAPL 예측에 대해서는, UP과 DOWN으로 llm 들끼리 반반씩 의견이 갈렸습니다.

        “중국 retail 마켓 전망이 좋음 (호재)”
        “반독점 소송 걸렸음 (악재)”

        이렇게 의견이 갈린 이유는, llm 들이 어느 쪽을 지지할 지에 대해 random 펑션을 돌린 거라서 그런 겁니다.

        제가 파라미터들을 직접 확인한 모델은 gemini-pro (현재 https://gemini.google.com/app 에서 서비스 중인 것) 뿐인데요. 그건 top k=1로 설정되어 있어서, 일관성 최우선으로 되어 있네요. top-k=1이면 매 다음 단어를 생성할 때 가장 확률이 높은 단어 1개만 고려한다는 뜻으로, 같은 질문을 하면 거의 같은 대답을 한다는 의미입니다.

        llm이 하는 일은, 말을 생성하는 도중에 다음 단어로 중국 뉴스를 고를까, 반독점 뉴스를 고를까 선택하는 어떤 기로가 있겠죠 거기서 llm이 주사위를 던집니다. 허용된 파라미터 조건 하에서, 랜덤 펑션을 돌려서 어느 것이든 고르기 때문에 확률이 적더라도 선택될 가능성이 여전히 있습니다. 그리고 그 결정을 지지하는 문장들을 그 뒤로는 아주 그럴 듯하게 만들어냅니다.

        참고로 gemini-pro는 일관성 최우선(top-k=1)으로 되어 있지만, gemini-vision은 top-k=40으로 되어있네요. 그림 그릴 때 붓 한번 놀릴 때마다 40가지 가능성 중에서 하나를 랜덤하게 고른다는 뜻이니까, 최종 그림 결과물의 가능성은 수백만가지가 넘겠네요.

    • Rsi 19.***.93.155

      지난 주 3~4% 빠진 다고 했었는데 강보합이었습니다. 이스터 할러데이가 끼는 바람에 예측에 약간 아웃라이어가 있지만 오늘까지 합하면 6% 하락이니 틀리지는 않았습니다

    • Rsi 19.***.93.155

      저도 kor 님 말대로 그냥 일단 재미반 진담반으로 보고 있습니다

    • N 174.***.70.113

      tmf

      tmf3

      • kor 96.***.233.115

        브래드니? IP도 바꾸고 이름도 바꾸고 그랬어? 10초 단위로 편집 편집 하는 거 보니까 브래드 맞네.

        내가 몰빵한 가격이 어디일지 지난 1년간 차트를 보고 맞춰봐~라. 하하

    • kor 96.***.233.115

      1
      현재로서는 N 님 말씀이 맞다고 봅니다 (Edit: 위에 N이 “Stupid!”라고 쓴 거에 대해 맞장구 쳐준 겁니다, 편집의 달인 브래드인 걸 모르고. 편집이나 답장 한 번 더 하면 이 쓰레드도 버려야 할 듯.)

      FinGPT의 어프로치는 지난 3주간의 헤드라인과 써머리를 읽고 “앞으로 1주일간 오를 거 같아, 내릴 거 같아?”라고 묻는 거라서 아직은 매우 초보수준입니다. 바둑으로 치면 이제 땅따먹기 규칙 배운 정도랄까요.

      이 방식의 장점은 일견 그럴 듯 하다는 겁니다, 단점은 주가를 못 맞춘다는 거고요 (-_-). 못 맞추는 것을 넘어서 더 잃을 가능성이 높아요. 뉴스를 보고 거래를 하면 대부분 잃는 것과 같이, FinGPT의 예상을 거래에 사용한다는 건 non-sense이고, 아직 stupid 수준인 거 맞아요.

      2
      앞으로도 계속 stupid 수준일까? 그게 아닌 거 같다는 느낌이 들어요. 제가 프롬프트 작업을 하면서 소위 meta 질문이라는 걸 자주 하게 돼요.

      질문을 해서 결과를 받아봅니다. <== 질문
      결과를 더 잘받기 위해 어떻게/어떤 질문을 해야 하는지를 다시 물어봅니다. <== 메타 질문

      그런데 이 메타질문을 해보면서, 의사 결정을 위한 핵심 정보를 쓰레기 속에서 도출해내는 것이 이제 정말 되는구나 하는 생각이 듭니다.

      과거 수십년간 실패해왔던 것이죠. MIS, DSS, EIS, ERP, KMS, Data Mining, Data Mart 등으로 이름만 바꾸어서 계속 시도되었던 경영 정보 요약, 패턴 찾기, 히든 패턴 찾기 등의 노력이 있었습니다. 모조리 다 실패했지만 동시에 모조리 다 성공했습니다. 기술 부족으로 실제로는 거의 다 실패했지만, 팀들이 먹고 살아야 하니까 성공했다고 발표한 프로젝트들이죠.

      그런데 초고성능 llm 덕분에 이제는 그게 될 거 같아요.

      3
      지금 이 기사 요약에 근거하여 주가 예측을 하는 건 stupid 맞는데, 제 생각에는 매일 300-500 페이지 정도 프롬프트로 입력해주면 Economist, Analyst, Trader 의견을 부문별로 순식간에 요약해 낼 수 있을 거 같습니다.

      그리고 예컨대 이런 답도 할 수 있게 만들 수 있을 것 같아요.

      • 정보 보고: 5분 전에 미 동부 항구의 LNG 생산시설에 대규모 폭발이 있었습니다. XX 수출이 전면 중단될 거라는 루머가 웹사이트에서 감지되었으나, 몇분 후 삭제되었습니다.
      • 정보 평가: news media에서 해당 소식이 없지만, 다수의 독립적인 social media에서 다수 발견되는 것으로 보아 사실일 가능성이 높습니다.
      • 분석: 이 루머가 사실일 경우 이 항구가 닫히게 되면 유럽으로의 천연가스 수출에 영향을 받아 유럽의 LNG 가격이 단기간 오를 수 있습니다.
      • 액션플랜: LNG 생산 기업, LNG, TELL을 오늘 시초가에 포트폴리오의 5% 매입

      실제로 작년 말에 있었던 일이고요, 그런 일이 다시 발생한다면 이런 요약보고가 10초 안에 나오면 좋겠죠. 미디어를 통해 전해지기 전에.

      이런 것을 가능케 하는 요체는 프롬프트 엔지니어링입니다(라고 썼다가, 인가?라고 바꿔봅니다 아직 확인중이니까)

    • kor 96.***.233.115

      지식에 대한 질문에도 답을 llm이 잘 하지만, 지식을 어떻게 뽑아내야 하는지 그 방법도 질문한다면 llm 이 잘 알려주네요.

      여러 직종의 직무에 대해 물어보면.

      미국 시장 채권 부문 수석 분석가를 채용하기 위한 면접 질문 5개와 검증용 키워드를 알려줘.

      1. 질문: 최근 연방준비제도(Fed)의 금리 인상 기조가 미국 국채 시장에 어떤 영향을 미칠 것으로 보시나요? 키워드: 수익률 곡선, 듀레이션, 인플레이션 위험, 금리 민감도
      2. 질문: 기업채권 분석 시 가장 중요하게 고려해야 할 요인은 무엇이라고 생각하시나요? 키워드: 신용등급, 레버리지 비율, 이자보상배율, 현금흐름
      3. 질문: 미국 고용 지표나 인플레이션 데이터 등의 경제 지표 발표 시 채권 시장은 어떻게 반응하는지 설명해 주시기 바랍니다. 키워드: 비농가고용지수, 소비자물가지수, 가격 메커니즘, 정책 기대
      4. 질문: 채권 포트폴리오 구성 시 어떤 전략을 취하시겠습니까? 특정 전략을 선호하신다면 그 이유는 무엇인가요? 키워드: 벤치마크, 듀레이션 매칭, 섹터 로테이션, 수익 최대화
      5. 질문: 글로벌 채권 시장이 미국 채권 시장에 미치는 영향에 대해 말씀해 주시기 바랍니다. 키워드: 환율, 해외 투자자, 상관관계, 글로벌 유동성

      미국 시장 포트폴리오를 운용하는 부서의 중국 분야 전문가를 채용하기 위한 면접 질문 5개와 검증용 키워드를 알려줘.

      중국 분야 전문가를 채용하기 위한 면접 질문과 검증용 키워드는 다음과 같습니다.

      1. 질문: 최근 중국 경제가 직면한 주요 도전과제는 무엇이라고 보시나요? 키워드: 부동산 위기, 제로 코로나 정책, 대외 무역갈등, 고령화
      2. 질문: 중국 정부의 공급측 구조개혁 정책이 중국 기업에 어떤 영향을 미칠 것으로 예상하시나요? 키워드: 국유기업 개혁, 과잉생산 해소, 부채감축, 생산성 제고
      3. 질문: 중국 증시의 밸류에이션 매력도와 리스크 요인에 대해 설명해주시기 바랍니다. 키워드: 주가수익배율, 기업이익성장률, 지정학적위험, 규제리스크
      4. 질문: 중국 정부의 친환경/신재생에너지 정책이 어떤 산업에 기회가 될 수 있을지 말씀해주세요. 키워드: 전기차, 태양광, 풍력, 배터리, 스마트그리드
      5. 질문: 중국 자본시장 개방에 따른 외국인투자 유치 기회와 과제는 무엇이라고 보시나요? 키워드: QFII/RQFII 제도, 스톡커넥트, 채권통, 위안화 국제화

      은행의 사기 방지 분야 법률 및 실무 전문가를 채용하기 위한 면접 질문 10가지와 검증용 키워드를 알려줘.

      은행의 사기 방지 분야 법률 및 실무 전문가 채용을 위한 면접 질문과 검증용 키워드는 다음과 같습니다:

      1. 질문: 금융사기의 주요 유형과 각각의 특징에 대해 설명해 주시기 바랍니다. 키워드: 대출사기, 계좌부정이체, 신원도용, 보이스피싱, 파밍
      2. 질문: 금융기관의 사기 위험 관리를 위해 중요한 내부통제조치에는 어떤 것들이 있나요? 키워드: KYC(고객실사), 의심거래보고, 직무분리, 감사추적, 보안성 강화
      3. 질문: 금융사기와 관련된 주요 법률과 규정에는 무엇이 있으며, 그 핵심 내용은 무엇인가요? 키워드: 특정경제범죄법, 형법, 금융실명법, 금융회사 지배구조법
      4. 질문: 금융사기 예방을 위해 고객 실사 시 주의해야 할 사항은 무엇인가요? 키워드: 실지명의 확인, 신원확인, 의심거래 모니터링, 자금출처 확인
      5. 질문: 금융사기 발생 시 내부 보고 및 대응 절차에 대해 설명해 주세요. 키워드: 사고대책반 구성, 증거수집, 금감원 신고, 피해최소화 조치
      6. 질문: 디지털금융 환경에서의 새로운 사기 위험과 대응 방안은 무엇이 있을까요? 키워드: 전자금융사기, 바이오인증, AI모니터링, 암호화폐 관련
      7. 이하 생략

      암호화폐 시스템 개발자를 채용하기 위한 면접 질문 5개와 검증용 키워드를 알려줘.

      1. 질문: 블록체인의 핵심 원리와 작동 방식에 대해 설명해주세요. 키워드: 분산원장, 합의알고리즘, 해시, 채굴, P2P 네트워크
      2. 질문: 비트코인과 이더리움의 주요 차이점은 무엇인가요? 키워드: PoW vs PoS, UTXO vs 어카운트, 스마트 컨트랙트, 가스비용
      3. 질문: 스마트 컨트랙트 개발 시 고려해야 할 보안 이슈에는 어떤 것들이 있나요? 키워드: 재진입 공격, 오버플로/언더플로, 외부 코드 호출, 접근 제어
      4. 질문: 암호화폐 월렛의 구성 요소와 주요 기능에 대해 설명해주세요. 키워드: 시드(Seed), 개인키/공개키, 트랜잭션 서명, HD(계층적 결정)
      5. 질문: 분산형 암호화폐 거래소의 장단점과 주요 기술적 과제는 무엇인가요? 키워드: 탈중앙화, 유동성, 원자적 스왑, 프런트러닝 공격

      질문을 20개 정도로 늘리고, 각자 자기가 일하는 잡 포지션을 넣어서 질문을 해보면, 내 포지션에서 나는 무엇을 알고 있어야 하는지를 ai가 일목요연하게 나열해줍니다. ai 시대에 나는 살아남을 수 있을까 스스로 판독 가능.

    • 치유마법 140.***.198.159

      리서치에 시간 많이 보내셨을텐데, 덕분에 많이 배웁니다. 감사합니다.