강화학습 - 밴디트 알고리즘(슬롯 확률 시뮬레이션, 상승장 종목 찾기)
Blog

강화학습 - 밴디트 알고리즘(슬롯 확률 시뮬레이션, 상승장 종목 찾기)

hyuniiie
2026.03.30
·Service·by 배레온/부산/개발자
#Bandit Algorithm#Epsilon-Greedy#Python#Reinforcement Learning#Simulation

핵심 포인트

  • 1본 연구는 강화학습의 Multi-Armed Bandit 문제와 ε-greedy 전략을 활용하여 최적의 슬롯 선택 및 보상 추정 방법을 시뮬레이션했습니다.
  • 2슬롯 머신 시뮬레이션을 통해 Q-값 업데이트 방식(샘플 평균 및 학습률 Alpha)과 탐험 확률 ε의 영향을 분석하며, 동적 환경에서의 에이전트 성능 변화를 검증했습니다.
  • 3마지막으로, KOSPI 종목 데이터에 Q-learning 개념을 적용하여 일간 5% 이상 상승 가능성이 높은 종목을 Q-값이 0.9를 초과하는 기준으로 탐색하는 실제 사례를 제시했습니다.

이 논문은 강화학습의 기초 개념인 밴디트 문제(Multi-Armed Bandit Problem)를 파이썬으로 구현하고 시뮬레이션하여 탐험(Exploration)과 이용(Exploitation)의 균형을 학습하는 과정을 상세히 설명합니다. 또한, 이를 실제 주식 시장의 상승 종목을 찾는 문제에 응용하는 사례를 제시합니다.

1. 강화학습 및 밴디트 문제 소개
강화학습은 에이전트(agent)가 환경(environment)과 상호작용하며 보상(reward)을 받아 최적의 정책(policy)을 학습하는 기계 학습의 한 분야입니다. 밴디트 문제는 여러 개의 슬롯 머신(밴디트) 중 보상을 최대화할 수 있는 최적의 슬롯 머신을 선택하는 강화학습의 기본 문제로, 알려진 정보를 이용(Exploitation)하여 현재 가장 좋다고 예상되는 선택을 하는 것과 새로운 정보를 탐험(Exploration)하여 더 나은 선택지를 찾을 가능성을 열어두는 것 사이의 균형이 중요합니다.

2. 슬롯 확률 추정 방법
두 가지 방식으로 슬롯 머신 성공 확률을 추정합니다.

  • 실험적 확률 추정 (Experimental Probability Estimation): 슬롯 게임을 여러 번 반복하여 성공 횟수를 총 시도 횟수로 나누는 방식으로 확률을 계산합니다. 반복 횟수가 많아질수록 실제 확률에 수렴하는 것을 보여줍니다.
  • 재귀적 업데이트 방식 (Recursive Update): 새로운 시도의 결과를 이전 추정 확률에 반영하여 점진적으로 확률을 업데이트합니다. 초기 추정치 QQ를 0으로 설정하고, 매 시도 nn에서 보상 rr을 받았을 때 다음과 같은 재귀적인 공식으로 QQ를 업데이트합니다:
Qn=rQn1n+Qn1Q_n = \frac{r - Q_{n-1}}{n} + Q_{n-1} 또는 Qn=Qn1+1n(rQn1)Q_n = Q_{n-1} + \frac{1}{n}(r - Q_{n-1}).
이는 이전 모든 시도의 평균을 반영하는 방식으로, 지수 이동 평균(Exponential Moving Average, EMA) 개념과 유사하게 새로운 데이터를 효율적으로 통합합니다.

3. 다중 슬롯 머신 문제 시뮬레이션 및 ϵ\epsilon-탐욕 알고리즘(Epsilon-Greedy Algorithm)
10개의 슬롯 머신이 각각 다른 성공 확률을 가지는 시뮬레이션 환경을 구축합니다.
Game 클래스는 각 슬롯의 성공 확률(rates)을 정의하고, 특정 슬롯(arm)을 플레이하여 보상(1 또는 0)을 반환하는 play 메서드를 가집니다.
Agent 클래스는 각 슬롯의 보상 추정치(Qs)와 시도 횟수(Ns)를 저장합니다. update 메서드는 선택된 슬롯의 평균 보상을 재귀적 업데이트 방식으로 갱신합니다.
핵심은 get_action 메서드에 적용된 ϵ\epsilon-탐욕 정책입니다. 이 정책은 epsilon 확률로 무작위 슬롯을 선택(탐험)하고, 1ϵ1 - \epsilon 확률로 현재까지 보상 추정치(Qs)가 가장 높은 슬롯을 선택(이용)합니다.
Qs 업데이트 공식은 다음과 같습니다:
QactionQaction+1Naction(rewardQaction)Q_{action} \leftarrow Q_{action} + \frac{1}{N_{action}}(reward - Q_{action})
시뮬레이션을 통해 ϵ\epsilon 값이 0.01, 0.1, 0.3일 때의 에이전트 성능(평균 보상률)을 비교합니다. 낮은 ϵ\epsilon 값(예: 0.01)은 초기에 보상 수렴 속도가 빠르지만 지역 최적점에 갇힐 수 있는 반면, 높은 ϵ\epsilon 값(예: 0.3)은 탐험을 많이 하여 전역 최적점을 찾을 가능성이 높지만 초기에 보상 수렴이 느릴 수 있음을 보여줍니다.

4. Q-러닝 알고리즘 (알파 고정 업데이트) 및 비정상 환경
이 섹션에서는 환경이 시간에 따라 변하는 비정상(non-stationary) 밴디트 문제를 다룹니다.
Game2 클래스는 play 메서드 호출 시 각 슬롯의 성공 확률에 노이즈를 추가하여 확률을 변화시킵니다 (self.rates+=0.1np.random.randn(self.arms)self.rates += 0.1 * np.random.randn(self.arms)). 이는 실제 환경의 변화를 모사합니다.
Agent2 클래스는 Q-값 업데이트에 학습률(learning rate) alpha를 도입하여 더 최근의 보상에 가중치를 둡니다. update 메서드의 Q-값 업데이트 공식은 다음과 같습니다:
QactionQaction+α(rewardQaction)Q_{action} \leftarrow Q_{action} + \alpha(reward - Q_{action})
이 업데이트 방식은 "알파 고정 업데이트(alpha constant update)" 또는 증분 평균(incremental mean) 대신 지수 가중 이동 평균(Exponentially Weighted Moving Average)의 일종으로 볼 수 있습니다. 이전 "샘플 평균(sample average)" 방식과 "알파 고정 업데이트" 방식의 에이전트 성능을 비교하여, 비정상 환경에서는 알파 고정 업데이트 방식이 더 효과적일 수 있음을 시각화합니다.

5. KOSPI 상승장 종목 찾기 응용
밴디트 알고리즘의 Q-값 개념을 KOSPI 주식 종목의 상승 가능성 평가에 적용합니다.
Q-값은 특정 상태(여기서는 주식 종목)에서 특정 행동(여기서는 해당 종목을 선택했을 때)을 취했을 때 기대되는 누적 보상의 추정치입니다. 즉, 특정 주식 종목이 미래에 얼마나 좋은 수익을 줄지에 대한 예측 값으로 사용됩니다.
각 KOSPI 상장 종목에 대해 주가 데이터를 순회하며, 오늘 종가가 내일 종가보다 5% 이상 상승했을 때 보상 Rn=1R_n=1, 아니면 Rn=0R_n=0으로 정의합니다.
Q-값은 위에서 설명한 알파 고정 업데이트 방식을 사용하여 갱신됩니다: QQ+α(RnQ)Q \leftarrow Q + \alpha(R_n - Q).
특히, Q>0.9Q > 0.9인 경우에만 보상률을 계산합니다. 이는 Q-값이 0.9보다 크다는 것이 해당 종목이 과거에 긍정적인 결과를 많이 가져왔으며, 기대 보상이 상당히 높다는 것을 의미하므로, 잠재적으로 상승 가능성이 높은 종목을 필터링하는 기준 역할을 합니다.
모든 종목에 대한 Q-값 계산 후, Q-값이 높은 순서로 정렬하여 상승 가능성이 높은 종목들을 찾아내는 방식으로 활용됩니다.