작은 데이터쟁이의 글
-
Autonomous Agents, Simulation with Agents
짧은 시간 동안 찾아보고 생각을 정리한 글이므로 틀린 정보가 있을 수 있습니다. Autonomous Agents OpenAI의 ChatGPT 이전부터 현재까지 LLM(Large Language Models)은 빠르게 발전 중이며 이제는 하나의 역할을 수행하는 Agent를 정의하고 동작하는데 사용할 수 있게 되었다. 이를 통해 잘 질문해야만 잘 답변 받았던 이전과 달리 "대충" 질문해도 좋은 답변을 받을 수 있게 되었다. 어떻게 하나의 역할을 수행하는지 알아보자. 대표적인 LLM을 통한 Autonomous Agent 중 하나인 Baby AGI는 위와 같이 내재적으로 질문에 대한 과제를 만들고 우선 순위를 정하여 해결하는 방법을 도출한다. 반복적으로 과제를 만들고 해결하면서 만들어진 질문과 답변을 DB에 저..
2023.05.16
-
[Brief Review] Twitter's Recommendation Algorithm
올해 3월, 트위터는 자신들의 추천 알고리즘 오픈 소스를 블로그와 깃을 통해 공개했다. 일단 블로그를 통해 공개된 전체적인 알고리즘을 리뷰하고 이후에 블로그의 여러 논문(Real Graph, SimClusters, ...)과 깃의 모델을 리뷰해보고자 한다. 트위터의 추천 알고리즘은 검색, 탐색, 광고 등 여러 부분에서 사용되지만 이번에 리뷰할 블로그에서는 For You 피드의 추천에 대해서 다룬다. 트위터에는 매일 5억 개의 트윗(트위터의 게시물)이 게시되고 이 중 몇 개만이 유저의 For You 타임라인에 게시된다. 그럼 어떻게 방대한 게시물 중 몇 개만을 샘플링하여 추천하는지 알아보자. How do we choose Tweets? 트위처 추천의 기반은 Model과 Feature이다. Feature는 ..
2023.05.09
-
[Brief Review] Are Neural Rankers still Outperformed by Gradient Boosted Decision Trees?
Zhen Qin, Le Yan, Honglei Zhuang, Yi Tay, Rama Kumar Pasumarthi, Xuanhui Wang, Michael Bendersky, and Marc Najork. Are Neural Rankers still Outperfromed by Gradient Boosted Decistion Trees? In ICLR 2021 Spotlight Abstract 과거부터 최근까지의 연구에서 LTR(Learning To Rank) 문제에서 Neural Model은 GBDT(Gradient Boosted Decision Tree)보다 성능이 좋지 못했다. 해당 논문은 왜 Neural Model이 GBDT보다 LTR에서 성능이 좋지 않은지, Neural Model의 성능을 향상..
2023.04.24
-
[PRML] 1.4. The Curse of Dimensionality
앞에서 살펴본 곡선 피팅 문제에서는 입력 변수가 하나였지만, 실제 입력 변수의 종류는 매우 다양하다. 이렇게 고차원 입력 변수를 다루는 것은 패턴 인식에서 중요한 고려 사항이다. 해당 문제를 살펴보기 위해 위 데이터를 예시로 들었다. 위 데이터로 하고자 하는 것은 \(x_{6}\)과 \(x_{7}\)이 있을 때, 해당 데이터가 무슨 Label을 가지는지 분류하는 것이다. Label의 종류는 색으로 나타나있다. 위 그림에서 \(\times\) 표시의 데이터가 새로 들어왔을 때, 해당 데이터를 무슨 Label로 분류할 수 있을지 생각해보자. \(\times\) 주위에 빨간색과 초록색이 있고 파란색을 멀리 떨어져있으므로 빨간색 혹은 초록색일 것이다. 이런 방식으로 새로운 데이터를 분류하기 위한 가장 단순한 접..
2023.01.04
-
[PRML] 1.3. Model Selection
앞서 다항식 곡선 피팅의 예시에서 가장 좋은 일반화가 되는 최적의 다항식이 존재한다는 것을 확인하였다. 일반화란 학습 데이터가 아닌 새로운 데이터에 대해 예측 성능을 최적화하는 것이다. 다항식에서는 차수가, 정규화 최소 제곱법의 경우에는 정규화 계수가 매개변수가 되며 매개 변수의 수에 따라 모델의 복잡도가 결정된다. 다양한 매개변수 값 중에서 가장 적합한 모델을 선택해야 한다. 훈련 집합에만 좋은 성능을 보이는 과적합(over-fitting) 문제를 막기 위해서 훈련 직합과 독립적인 검증 집합(validation set)을 구성하여 모델을 매개변수에 따라 비교하고 선택한다. 반복적으로 검증 집합에 대해 모델을 실험하게 되면 검증 집합에도 과적합 될 수 있어 모델의 최종 성능을 판단하기 위한 시험 집합(t..
2023.01.02
-
Skill Rating: Elo
체스나 특정 온라인 게임에서는 플레이어의 실력을 나타내는 지표를 사용한다. 해당 지표는 단순히 실력을 나타내는 것 뿐만 아니라 비슷한 실력 지표를 갖는 사람끼리 매칭시키는데에도 사용된다. Elo는 두 플레이어의 Rating 차이를 통해 예상 승률을 추정하고 실제 결과에 따라 패자의 Rating 일부를 승자의 Rating에 더한다. Rating 차이가 클 때, Rating이 높은 플레이어가 이겼다면 적은 Rating을 얻고 Rating이 낮은 플레이어가 이겼다면 예상 승률을 뒤집는 결과를 낸 것이므로 많은 Rating을 얻는다. Elo Rating을 통해 예상 승률을 추정하는 방식은 아래와 같다. $$ E_{A} = \frac{1}{1+10^{(R_{B}-R_{A})/400}} $$ $$ \begi..
2023.01.02
-
[PRML] 1.2. Probability Theory
패턴 인식에서 불확실성(uncertainty)는 데이터 측정시의 노이즈를 통해서도 발생하고 데이터 집합 수가 제한되어 있다는 점에서도 발생한다. 확률론(probability theory)를 사용한다면 이런 불확실성 속에서 최적의 예측을 할 수 있게 된다. 문제를 해결하기 앞서 합의 법칙(sum rule)과 곱의 법칙(product rule)에 대해 설명한다. (Figure 1.10) 이를 설명하기 위해 왼쪽의 그림을 사용한다. \(x_{i}\)를 값으로 가지는 확률 변수 \(X\)와 \(y_{j}\)를 값으로 가지는 확률 변수 Y가 있다. 총 N개의 변수가 있을 때, \(X=x_{i}\), \(Y=y_{j}\)인 경우의 수는 \(n_{ij}\)로 표현하며 각 행 \(i\)에 있는 포인트 수는 \(c_{i..
2022.11.28
-
[PRML] 1.1. Example: Polynomial Curve Fitting
PRML 1.1장에서는 개념에서 들어가기 앞서 회귀 문제를 예시로 든다. (Figure 1.2) 훈련 집합 \(x=(x_{1},...,x_{N})^{T}\)와 그에 해당하는 표적값 \(t=(t_{1},...,t_{N})^{T}\)가 주어졌을 때, 왼쪽의 plot은 N=10일 경우의 데이터 plot이다. 표적값 t는 \(sin(2\pi x\)에 가우시안 분포를 가지는 노이즈를 더해서 만들었다. 해당 예시의 목표는 훈련 집합을 사용하여 새로운 입력값 \(\hat{x}\)가 주어졌을 때, 타깃 변수 \(\hat{t}\)를 예측하는 것이다. 이를 위해 아래 다항식을 Fitting하고자 한다. 피팅은 훈련 집합의 표적값들과 함숫값 \(y(x,w)\)와의 오차를 측정하는 오차 함수(error function)를 정..
2022.11.20
-
Bayesian Inference
이번 글에서는 널리 사용되고 있는 Bayesian Inference에 대해 설명하고자 한다. 여러 분포 중에서 Normal Distribution의 Bayesian Inference에 대해 설명할 것이며 이후 어떻게 사용할 수 있는지 예제를 통해 이야기해볼 것이다. Bayesian Inference: 베이즈 추론 Bayesian Inference(베이즈 추론)는 prior(사전 확률)과 likelihood(가능도)를 통해 posterior(사후 확률)을 구하는 과정이다. $$ p(\theta|X) = \frac{p(X|\theta)p(\theta)}{p(X)} $$ 위 식이 각각 나타내는 것은 \(posterior = \frac{likelihood \times prior}{evidence} \)이다. 베..
2022.11.01
-
Factor Graph: 인자 그래프
Factor Graph는 확률 분포나 함수를 도식적으로 나타낸 것이다. 이 그래프는 Factor Node(■)와 Variable Node(○)로 구성된 Bipartite Graph이다. Edge에 방향성을 주어 방향성 혹은 비방향성 Graph로 나타낼 수 있으며 그래프의 특징을 활용하여 확률 분포해 Marginalization을 효율적으로 표현할 수 있다. Factor Graph에 들어가기 앞서 대표적인 Factor 연산으로 Product와 Marginalization이 있다. Factor는 Variable이 입력되면 입력에 맞는 Output를 출력하는 함수 혹은 확률 변수를 말한다. Product는 두 Factor의 Variable들을 한 번에 갖고 두 Factor의 Output 곱을 출력하는 Fact..
2022.10.24
-
파이썬으로 노션 데이터베이스 접근하기
우리는 보통 노션을 개인적인 글을 작성하거나, 협업에서 칸반 보드를 사용하는 어떤 글을 작성하는 용도로 사용한다. 하지만, 노션은 글을 작성하는 용도 뿐만 아니라 API를 통해 데이터베이스를 모델링 실험에서 파라미터별 성능을 저장하거나 웹 서빙에서 DB로 사용할 수 있다. 본인은 위와 같은 용도로 노션 데이터베이스를 사용하기 위해 노션 API를 통해 파이썬으로 데이터베이스의 요소를 가져오거나 요소를 추가하는 Cheat Sheet를 작성해보려고 한다. 0. 초기 세팅 노션의 데이터베이스란 페이지를 다양한 형태로 모아놓은 저장소이다. 표, 보드, 타임라인, 캘린더 등의 형태로 표현할 수 있으며, 이번 글에서는 아래와 같은 표 형식을 기준으로 설명할 것이다. 파이썬에서 노션 데이터베이스에 접근하려면 프라이빗 ..
2022.08.08
-
가격 전략 세미나 회고
회사에서 가격 전략 세미나를 진행했다. 가격 전략이 무엇인지 궁금하여 듣게 되었고 실무와 학문을 적절하게 연결하여 진행된 강의는 상당히 흥미로웠다. 차후에 소비자의 입장 혹은 가격 전략이 필요한 입장이 되었을 때, 해당 내용을 리마인드하고자 회고를 작성한다. 강사분이신 신병철 박사님에 대해 짧게 소개를 하자면, 현재 중간계 캠퍼스의 대표와 배달의 민족 CAO(Cieft Advisory Officer) 직무를 맡고 계시며 대학민국 최초로 박사학위 논문이 마케팅 관련 최고 수준의 학술지인 Journal of Marketing Research에 게제되었다고 한다. 그 외에도 야나두, 텐마인즈, 여기어때 등의 기업에 자문위원 경험이 있으시며 CJ 그룹 마케팅 부사장까지 하셨던 마케팅 분야 최고 존엄 급이시다. ..
2022.06.19
-
카일타임 회고
쏘카에 입사한지 4주차, 평소에 대화를 나누고 싶었던 카일과 시간을 가질 기회가 있어 덥석 잡았다. 카일은 이전에 딥러닝 프로젝트와 면접 준비를 할 때, 도움을 많이 받았던 블로그의 글쓴이이며 Data Analyst를 시작으로 Engineering까지 커리어를 쌓고 싶은 내가 희망하는 커리어 패쓰를 이미 경험한 인생 선배이다. 네이버 부스트캠프 AI Tech 1기에서 교육을 받을 때 카일의 특강을 들을 수 있었지만, 한 번의 특강은 너무 아쉬어 한 번쯤 이야기를 나누고 싶었고 1년만에 바람이 이루어진 것이다. (이후 부스트캠프 AI Tech 2기, 3기에서는 마스터(강사)로 강의를 진행해주셨다.) 카일타임의 시작은 나에 대한 이야기부터 시작하였다. "이전 회사는 어땠어요?", "현재 일은 어때요?" 등의..
2022.06.13
-
[코인 자동 매매 개발기 2] 변동성 돌파 전략, Prophet, Back-Testing
적어도 2주에 한 번씩은 모델을 개선하고 전략을 찾아 추가하려고 했으나, 일을 하며 부수적으로 무엇인가 한다는 것은 매우 어려웠다... 앞 포스터에서 언급한 것처럼 "조코딩"님의 유튜브를 참고하여 strategies.py에는 변동성 돌파 전략을, models.py에는 페이스북의 시계열 모델인 Prophet을 추가했다. 그 외에도 validation.py에 모델의 성능을 검증하는 model_validation 함수와 이전 데이터로 수익률을 판단해보는 backtesting 함수, 그리고 backtesting을 시각화하는 기능을 추가하였다. Strategy: 변동성 돌파 전략 (Volatility Break-out Strategy) 해당 전략은 위 그림을 통해 설명할 수 있다. 전 날의 시가와 종가 사이에서 ..
2022.05.30
-
[코인 자동 매매 개발기 1] 초기 시스템 설계
코인 자동 매매 시스템을 개발하는 미니 프로젝트를 시작했다. 주식이 아닌 코인으로 자동 매매 시스템을 개발하는 이유는 접근성이 쉽게 느껴졌기 때문이다. 또한, 외부적 요인 없이 차트 자체로 예측하기 쉬울 것이라고 판단했다. (근거 없는 개인의 의견...) 여유가 있을 때마다 개발 및 예측 모델 실험을 할 예정이며 최종적으론 파이썬 라이브러리로 사용할 수 있게 함과 동시에 웹으로 자동 매매 결과를 배포하여 모델의 성능이나 해당 시스템을 사용했을 시에 손익을 나타내는 것을 목표로 하고 있다. (그 과정에서 ML 뿐만 아니라 프론트와 백앤드도 학습하여 어느 정도 Full-Stack 지식을 쌓고 싶다.) 시스템 설계 자동 매매 시스템은 config.json에서 하이퍼파라미터를 입력받고 자동 매매가 진행될 mai..
2022.05.01
-
주관적인 도전의 원동력, 성장의의미
면접을 위해 예상 질문을 준비하거나 면접에서 질문을 받을 때는 평소에 생각하지 못한 물음을 생각하게 된다. 이번에도 좋은 기회로 IT 기업의 Culture Fit 면접을 진행하였고 수많은 질문 중에서 인상 깊은 질문과 답변에 대해 적어보려고 한다. 인상 깊었던 질문은 "도전의 원동력은 무엇인가요?"와 "어떤 것을 통해 성장했다고 느끼시나요?"이다. 물론 면접 때에는 깊게 생각하지 못하고 평소의 생각과 경험을 토대로 답변하였지만, 이 흥미로운 질문을 깊게 생각해보려고 한다. 도전의 원동력은 무엇인가요? 지금껏 다양한 인턴 경험과 프로젝트 경험을 하였고 그 외에도 재능 기부 교육, 학생회 활동을 하였다. 이와 같은 모든 활동은 내가 이전에 해보지 못한 "도전"이었다. 나에게 이런 도전의 원동력은 무엇일까? ..
2022.04.20
-
Gradient Descent Methods
Pytorch를 이용하여 딥러닝 모델을 구현하다 보면 torch.optim에서 SGD, Adam과 같은 다양한 optimizer를 볼 수 있습니다. 이들은 학습(Gradient Descent) 시에 파라미터를 업데이트하는 알고리즘이며 왜 Adam이 많이 쓰이는지, 여러 Gradient Descent 방법론들이 어떤 문제가 있고 어떻게 문제를 해결하고 발전해갔는지 간단하게 적은 해당 글을 보며 배울 수 있었으면 좋겠습니다. (Stochastic) Gradient Descent 먼저 간단하게 Gradient Descent(경사 하강법)에 대해 알아보겠습니다. Gradient Descent는 미분 가능한 함수의 Local Minimum을 찾기 위해 1차 미분한 값을 사용하는 반복적인 최적화 알고리즘입니다. 좌..
2022.04.13
-
주관적인 주니어 Data Scientist 필요 역량
생각이 많고 생각 정리가 필요할 때마다 회고 글을 작성하기로 다짐했다. 여유가 있을 때만... 2022년 4월의 나는 번개장터 데이터 사이언티스트 인턴과 카카오 추천팀 분석 직군 인턴을 마쳤으며, 현재 다른 기업의 데이터 직군으로 취준 중이다. 두 번의 데이터 직군 인턴과 다수의 면접 경험을 기반으로 "기업들이 신입에게 요구하는 역량"에 대해 생각해보았다. 주니어 데이터 사이언티스트의 필요 역량은? 일단 해당 필요 역량들은 매우 주관적이다. 내가 면접에서 공감을 얻었던 답변과 인턴을 하며 나에게 요구했던 역량들을 기반으로 적어보았다. 0. Hard Skills 여기서 Hard Skills이란 데이터 사이언티스트의 기술적 역량을 뜻한다. 데이터 분석부터 모델링, 배포 등이 될 수 있으며 최소한 자격 요건에..
2022.04.11
-
Jupyter notebook snippets.json 위치
nbextension 주피터 노트북을 사용하게 되면 대부분 nbextension을 설치할 것입니다. nbextension에는 다양한 기능이 있는데, 그 중에서도 snippets을 자주 사용합니다. snippets snippets은 자주 사용하는 코드를 미리 저장해놓아 클릭 몇 번으로 해당 코드를 작성해줍니다. 그럼 snippets에 코드를 어떻게 저장할까요? jupyter notebook에서 Snippets를 누르면 아래와 같이 보입니다. 여기서 example을 누르면 아래와 같이 저장 방법을 나타내줍니다. 그럼 어떻게 /nbextensions 이 있는 경로를 알 수 있을까요? jupyter notebook에서 !jupyter --data-dir를 입력해주면 됩니다. 위 코드 입력시 C:\Users\Us..
2022.04.11
-
"pip install pycaret" errors
⚡ pip install pycaret 발생한 에러 ERROR: Command errored out with exit status 1 ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다: ERROR: Could not build wheels for bottleneck which use PEP 517 and cannot be installed directly 🔧 시도한 해결법 1. ERROR: Command errored out with exit status 1 conda install [package] 로 받기 직접적인 해결방안은 아니었지만, 이후 에러가 발생하지 않았습니다. whl 파일 받아 install 하기 h..
2022.04.11