데이터 분석(57)
-
2024 KBO MVP를 선수 스탯을 통해 머신러닝으로 예측해보기
서론올해로 4년째 해보는 토이 프로젝트이다. 먼저 결론부터 쓰자면 2024 KBO MVP는 김도영이 될 것으로 머신러닝 예측 결과가 나왔다. 2021년부터 계속해온 MVP 예측 결과를 정리하면 아래와 같다.연도예측결과2021미란다미란다2022(잊음)이정후2023페디페디2024김도영??? 2022년에는 잊고 있어서 빼먹었고, 2021, 2023년은 MVP 발표가 된 후 예측했던 거라 감흥이 적었다면 올해는 MVP 발표가 되기 전이라 결과가 기대된다. 아래부터는 어떻게 예측했는지를 설명하고자 한다. 데이터 수집 및 정제당연한 소리지만 우선 데이터를 수집해야한다. 투, 타 모두 연도별로 선수 성적 데이터를 가져오는데 전체 데이터를 가지고 오면 MVP가 매우 적은 불균형한 데이터가 된다. 이를 막기 위해 연도별..
2024.10.12 -
LangChain을 이용한 RAG - (6) 여러 문서 RAG 태우기
2024.06.03 - [AWS] - [AWS Summit Seoul 2024] LLM의 프롬프트 엔지니어링2024.07.22 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (5) 생성 편아이디어이전에 AWS Summit에서 고급 RAG라고 해서, RAG로 문서와 관계 없는 질문을 하면 성능이 떨어지기 때문에 필요할 때만 RAG를 사용하도록 하라고 했었다.참고: [발표자료][생성형 AI 및 기계 학습] Amazon Bedrock을 활용한 프롬프트 엔지니어링 모범사례 (awscloud.com) 나는 이에 대해 아래와 같은 아이디어를 냈었는데 직접 구현해보기로 했다. 1. 주제가 다른 문서마다 벡터스토어를 따로 만들기2. 사용자의 질문이 들어오면 LLM을 통해 어느 벡터스토어를 거쳐야할..
2024.08.05 -
LangChain을 이용한 RAG - (5) 생성 편
2024.07.15 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (4) 검색 편Augment & GenerateRetriever를 통해 찾은 문서를 프롬프트에 증강(Augment)하고 LLM을 통해 답변을 생성(Generate)하는 과정이다. 이로써 RAG의 R, A, G가 모두 제 역할을 마치게 된다. Chain을 이용한 생성LangChain에 왜 Chain이 붙었는지에 대한 이유를 여기서 알 수 있게 된다.from langchain_openai import ChatOpenAIfrom langchain_core.output_parsers import StrOutputParserfrom langchain.schema.runnable import RunnablePassthrough..
2024.07.22 -
LangChain을 이용한 RAG - (4) 검색 편
2024.07.11 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (3) 벡터 DB 편Retrieve드디어 RAG의 R을 수행한다. LangChain에서는 벡터스토어를 통해 검색을 하게 되며, 3편을 보면 벡터스토어를 선언할 때 임베딩 모델을 함께 넣어주기 때문에 사용자 입력(쿼리)을 벡터스토어가 알아서 임베딩해주고 그 결과를 가지고 검색을 수행한다.vectorstore_faiss = FAISS.from_documents( documents=split_docs, embedding=hf # HuggingFaceBge 임베딩 모델) 벡터스토어를 통해 바로 검색하는 방법이 있고, 벡터스토어를 retriever(검색기)로 변환한 후 검색하는 방법이 있다.query = "리셀은 암표와..
2024.07.15 -
LangChain을 이용한 RAG - (3) 벡터 DB 편
2024.07.06 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (2) 문서 임베딩 편벡터 DB말 그대로 "벡터" 데이터를 효율적으로 저장하고 빠르게 검색하는데 최적화된 데이터베이스이다. 벡터 DB를 사용하는 이유는 1편에서 간단하게 설명했었다. 나는 거지이기 때문에 무료인 FAISS, Chroma DB를 사용하였다. 벡터스토어 생성벡터스토어는 벡터DB와 동일한 개념으로 사용되는 용어다. LangChain에서는 벡터스토어라고 표현을 했기 때문에 나도 그에 맞춰 작성을 하였다.from langchain_community.vectorstores import FAISS, Chromavectorstore_faiss = FAISS.from_documents( documents=spl..
2024.07.11 -
JupyterLab에서 Amazon Q Developer 사용하기
Amazon Q Developer= 개발자를 위한 챗봇이다. 코드를 어떻게 작성해야 해결할 수 있을지 물어보고, 에러가 있을 때 해결방법을 알려주는 기능을 제공한다. 여기까지는 일반 LLM과 다른 점을 찾기 힘들다고 할 수 있겠지만 이외에도 [프로젝트의 전체 코드 확인 및 자동 주석 추가], [보안 취약점 확인 및 개선법 제공], [AWS 콘솔에서 오류 발생 시 해결책 제시], [네트워크 연결성 및 VPC 접근성 분석], [Code Transformation(Java 8에서 17로 업그레이드 기능)] 등을 제공한다.여기에 가장 추천하고 싶은 기능은 코드 작성 도우미인 [Code Whisperer]이다. Code Whisperer는 Github Copilot과 유사한 작업을 하여 코드 문맥이나 주석에 맞춰..
2024.07.08 -
LangChain을 이용한 RAG - (2) 문서 임베딩 편
2024.07.01 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (1) 이론편 임베딩 방식"문서를 어떻게 벡터화하지?"라는 근본적인 질문에는 Word2Vec, BERT 같은 임베딩 모델에 대해 직접 찾아보는 것을 추천한다.여기서는 LangChain을 이용하여 임베딩을 수행하는 방법을 설명하고자 한다. (1) 파일 불러오기pdf, csv, txt, docx 파일, 데이터프레임 등 다양하게 불러올 수 있다. `DirectoryLoader`를 이용하여 여러 파일을 동시에 불러올 수도 있다.from langchain.document_loaders import PyPDFLoader, CSVLoader, TextLoader, Docx2txtLoader, DataFrameLoader, Dire..
2024.07.06 -
LangChain을 이용한 RAG - (1) 이론편
RAG란Retrieve-Augmented Generation으로 굳이 한국어로 번역하자면 검색-증강 생성이 된다. 이는 LLM이 학습하지 않은 정보에 대해 답변을 잘 하지 못하는 문제를 해결하기 위해 나온 방법이다. GPT-3.5가 2021년까지의 데이터로 학습이 되었기 때문에 그 이후의 질문을 하면 대답을 잘 하지 못하거나 엉뚱한 답을 한다. 하지만 one-shot 프롬프트나 few-shot 프롬프트 엔지니어링을 통해 원하는 답을 만들게 할 수 있는데 이를 응용한 것이 RAG이다. 좀 더 쉽게 설명하자면, 프롬프트 안에 "정답지"를 주고 그 정보를 이용하여 답을 하게 만들게 하는데 결국 오픈북 시스템과 비슷하다고 볼 수 있다. RAG의 필요성그럼 이런 의문점이 생길 것이다. "정답을 알고 있는데 왜 굳..
2024.07.01 -
Jupyter에서 LLM response를 stream 형태의 Markdown으로 보기
1. 배경OpenAI나 Bedrock API 등의 LLM을 이용하여 프롬프트, 파라미터 조정 등 챗봇 테스트를 진행하고자 하는 경우가 있다. streamlit을 이용하여 챗봇 화면을 구성하여 테스트를 진행할 수도 있으나 jupyter notebook (혹은 jupyter lab)에서 수행하는 것이 더 적절할 때가 있다. 이럴 때 stream 형태(ChatGPT, Copilot처럼 토큰마다 답변이 생성되어 나오는 형태)로 답변을 받고자 했다. 물론 토큰 단위로 `print(..., end='')`하면 출력되는 값을 실시간으로 확인할 수 있지만 나는 답변을 Markdown으로 바꿔서 확인하고 싶었다. 챗봇 클래스를 만들어 이전 대화가 이어지게 하는 건 덤. 2. OpenAI API를 이용한 챗봇 클래스 구..
2024.06.25 -
분류 모델의 shap value를 확률값으로 확인하기
1. 배경 상황shapley value는 설명 가능한 AI(XAI) 중 하나로 모델이 "왜" 그렇게 예측을 했는지를 설명해주는 방법이다. python의 `shap` 라이브러리를 이용하여 계산할 수 있다. shapley value는 분류 모델과 회귀 모델 둘 다 계산할 수 있는데, 이 중 분류 모델의 경우 아래와 같이 확률 예측 범위(0~1)를 벗어난 값을 보여준다.위는 소득 분류 데이터를 XGBoost로 학습하여 class가 1인 데이터에 대한 이미지다. 이 이미지를 해석하면전체 데이터에 대한 기댓값 -1.443에 비해 특정 데이터에 대한 예측 값은 -0.223이었고, 그렇게 되는데 영향을 주는 건 relationship, marital-status 순이다. 그 둘은 양의 영향을 주었다. 난 분명 이진 ..
2024.05.27