플레이어 수 예측
- 주 태스크로 하고 그 예측값을 사용하여 미분 가능한 효율성 계산을 수행하며 두 태스크의 손실을 동시에 최적화시키기
목적: 플레이어 수를 효율성을 계산하며 예측하기
# 1단계: 플레이어 수 예측
predicted_players = model.predict(input_data)
# 2단계: 효율성 계산
efficiency = (predicted_players / (tables * 5)) * 100
문제점: 플레이어 수를 예측하고 효율성을 예측하면 두 단계가 독립적으로 수행되어, 효율성 계산이 예측에 영향을 주지 못한다.
# 이렇게 하면 각각 따로 계산됨
predicted_players = model.predict(input_data) # 첫 번째 모델
efficiency = calculate_efficiency(predicted_players) # 두 번째 단계
# 문제점:
# - 효율성 계산이 예측에 영향을 주지 못함
# - 두 단계가 독립적으로 수행됨
도전: 미분 가능한 효율성 계산을 사용해보자
@tf.function # 텐서플로우 연산으로 변환
def calculate_efficiency(players, tables):
players_per_table = tf.math.divide_no_nan(players, tables)
efficiency = (players_per_table / 5.0) * 100
return efficiency
class Model(tf.keras.Model):
def call(self, inputs):
# 한 번에 계산
players = self.predict_players(inputs)
efficiency = calculate_efficiency(players, tables)
return players, efficiency
장점1. 역전파(Backpropagation) 가능
# 효율성 오차가 플레이어 예측에도 영향을 줌
loss = player_loss + efficiency_loss
gradient = tape.gradient(loss, model.variables)
장점2. 최적화
# 만약 실제 상황:
actual_players = 15
actual_tables = 5
target_efficiency = 60% # (15 / (5 * 5)) * 100 = 60%
# 모델 예측:
predicted_players = 20 # 좀 높게 예측
predicted_efficiency = 80% # (20 / (5 * 5)) * 100 = 80%
# 두 가지 손실 발생:
player_loss = (20 - 15)² # 플레이어 예측 오차
efficiency_loss = (80 - 60)² # 효율성 오차
# 이 두 손실이 모두 영향을 주어 예측 개선
이에 대한 효과
# 기존 방식
predicted_players = 20 # 플레이어 수만 보고 예측
# 새로운 방식
predicted_players = 17 # 효율성도 고려하여 예측 조정
# 왜? 효율성이 너무 높아지면 그에 대한 손실도 발생하기 때문
결론
- 플레이어 수 예측과 효율성 계산을 하나의 연결된 과정으로 만듦
- 효율성이 너무 높거나 낮아지는 것을 방지하면서 플레이어 수를 예측
- 두 가지 목표(정확한 플레이어 수 예측 + 적절한 효율성 유지)를 동시에 달성하려고 시도
모델이 플레이어 수만 보는 것이 아니라, 그 예측이 실제로 테이블 효율성에 어떤 영향을 미칠지도 고려하면서 학습하며 " 두 태스크의 손실을 동시에 최적화" 하기 위해 노력.
'Machine Learning > 시계열 데이터 예측' 카테고리의 다른 글
[LSTM] T4 GPU와 L4 GPU의 차이 (3) | 2024.10.27 |
---|