
안녕하세요!

사이드 프로젝트 관련 포스팅으로는 오랜만에 인사드립니다.
스팀에서 여러모로 내 취향 게임을 찾기 어렵고, 위시리스트에만 잔뜩 넣어놓고 결국은 플레이 하지 못했던 경험들때문에 이 웹사이트를 제작해보게 되었습니다.
나의 스팀 라이브러리를 싱크하고 게임들에 '좋아요 싫어요'를 누를 수록 취향 벡터값이 변하게 되어 추천되는 게임이 변경되는 알고리즘을 가지고 제작하였습니다.
• 해봤어요: 이미 플레이한 게임 (추천에서 제외)
• 해보고싶어요: 관심 게임 → 위시리스트 자동 추가
• 관심없어요: 해당 장르/태그 가중치 감소
• 재미없었어요: 강한 부정 피드백, 해당 태그 페널티
게임 추천 알고리즘 상세
1.데이터 수집
1.1) 사용자 데이터
Steam Web API를 통해 다음 데이터를 수집합니다:
1. 보유 게임 목록: IPlayerService/GetOwnedGames
2. 총 플레이타임: playtime_forever (분 단위)
3. 최근 2주 플레이타임: playtime_2weeks
4. 마지막 플레이 시간: rtime_last_played
1.2) 게임 메타데이터
• 장르: 액션, RPG, 전략, 시뮬레이션 등
• 카테고리: 싱글플레이어, 멀티플레이어, 협동, PvP 등
• 태그: SteamSpy 기반 사용자 태그 (투표 수 포함)
• 메타크리틱 점수: 게임 품질 지표
• HLTB 플레이타임: HowLongToBeat 기반 예상 플레이 시간
2. 취향 벡터 계산
2.1) 장르 벡터 (Genre Vector)
Engagement Score 계산:
baseScore = √(playtimeHours) + (playtimeHours × 0.01)
보정 요소:
• 최근 2주 플레이 보너스: ×1.3
• 30일 내 플레이 보너스: ×1.2
• 경쟁 게임 (PUBG, Dota2 등) 감소: ×0.8
• 일반 멀티플레이어 감소: ×0.9
2.2) 태그 벡터 (Tag Vector)
tagWeight = (votes / totalVotes) × engagement
피드백 반영:
• 해봤어요: +100%
• 해보고싶어요: +60%
• 관심없어요: -40%
• 재미없었어요: -70%
3. 추천 점수 계산
3.1) 기본 점수 공식
태그 데이터가 있는 경우:
finalScore = (genreSim × 0.50) + (tagSim × 0.20) + (quality × 0.20) + (fatigue × 0.10)
태그 데이터가 없는 경우:
finalScore = (genreSim × 0.70) + (quality × 0.30) + 0.05
3.2) 코사인 유사도 (Cosine Similarity)
similarity = (A · B) / (||A|| × ||B||)
3.3) 품질 점수 (Quality Score)
qualityScore = min(0.5, log₁₀(recommendations + 1) / 10) + (metacritic / 100) × 0.5
여러분에게는 어떤 게임들이 추천될까요?
지금 바로 한번 방문해서 확인해보세요 ㅎㅎ
'Games' 카테고리의 다른 글
| (게임 공략) 바이오하자드 RE:2 레온 A 시나리오 단축 공략 (0) | 2019.01.31 |
|---|---|
| (게임 공략) 바이오하자드 RE:2 클레어 A 시나리오 단축 공략 (0) | 2019.01.31 |