우연히 kaggle을 돌아다니다가 말레니아와 관련된 데이터셋을 보게 되었습니다
말레니아는 엘든링의 보스들을 통틀어 가장 난이도가 높다고 평가되는 악명 높은 보스입니다
제가 엘든링을 굉장히 재밌게 했었기 때문에 (I am Malenia. Blade of Miquella)
이 데이터에 흥미를 가지게 되었고 이 데이터를 이용해 분석 및 예측을 해보자고 생각을 하게 되었습니다
데이터셋 링크
https://www.kaggle.com/datasets/jordancarlen/host-deaths-to-malenia-blade-of-miquella
Host_Death_Time : 호스트가 죽은 시간
Host_Build : 호스트의 주 공격 무기
RAW_MELEE - 근접 무기
RAW_CAST - 마법 사용
PROC_MELEE - 상태 이상 속성가진 근접 무기
PROC_CAST - 상태 이상 가진 마법 사용
HYBRID - 하이브리드
Level : 호스트의 레벨
Phase : 말레니아의 페이즈 ( 총 2페이즈 존재 )
Waterflow_Death : 말레니아의 궁극기에 죽었는 지
위는 말레니아 궁극기 사진
Health_Pct : 호스트가 죽었을 때 말레니아의 체력 상태
Location : 보스 방 어느 위치에서 죽었는 지
Phantom_Count : 소환한 다른 플레이어
1 : 없음 , 2 : 있음
Phantom_Build : 다른 플레이어의 주 공격 무기
Phantom_Death : 호스트보다 먼저 죽었는 지
이번엔 얼마나 진도, 즉 페이즈의 진행에 관한 분석을 해보겠습니다
위의 분석을 봤을 때 원래는 살아 남는 시간 예상을 하려 했지만
오래 살아 남아 봤자 페이즈가 진행이 되지 않는(도망만 다니는) 모습이 데이터 분석에 보여서 크게 의미 없다고 느껴서
진행 상태를 나타내는 페이즈를 예측 하기로 결정했습니다
테스트 스코어가 좋은 KNeighborsClassifier, LogisticRegression, RandomForestClassifier 의 파라미터를 조절해서 가장 좋은 값이 나온 것을 선택하겠습니다
파라미터 결정은 Grid Search 를 이용했습니다
Grid Search를 활용해서 파라미터들을 조절하다 보니
결과는 위와 같이 나왔습니
로지스틱 회귀 결과는 이와 같이 나왔습니다
결과는 이와 같이 나왔습니다
위의 결과들을 봤을 때 KNeighborsClassifier 이 결과가 가장 좋아서 모델링을 하도록 하겠습니다
이렇게 구했던 파라미터들을 넣어 주고 돌려주니 대략 50퍼센트의 정확도를 보여주네요ㅋㅋ...
일단 예측할 값을 넣기 전에 어떤 값들이 필요한지를 보겠습니다
전처리 과정에서 Location , Host_Build, Phantom_Build 칼럼은 원 핫 인코딩을 해줬고요
df = pd.get_dummies(df,columns=["Host_Build"])
df = pd.get_dummies(df,columns=["Phantom_Build"])
df = pd.get_dummies(df,columns=["Location"])
Phantom_Death, Waterflow_Death 는 레이블 인코딩을 해주었습니다
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
encoder.fit(df['Phantom_Death'])
digit_label = encoder.transform(df['Phantom_Death'])
df['Phantom_Death'] = digit_label
df['Waterflow_Death'] = df['Waterflow_Death'].apply(lambda x : 1 if x else 0 )
Phantom_Death 에서 0은 부른 플레이어가 아직 안 죽은 것, 1은 부른 플레이어가 먼저 죽은 것, 2는 부른 플레이어가 없는 것
Waterflow_Death 에서 0은 궁극기에 안 죽은 것, 1은 죽은 것을 의미합니다
일단 전 엘든링 했을 때 점성술사(마법사)를 했고 레벨이 엔딩 기준 120이였고 솔로 플레이를 했습니다
이 정보에다가 말레니아의 궁극기에 맞아 죽었다고 했을 때 전 대략 몇 페이지까지 갔을 까 예상해보도록 하겠습니다
만든 데이터는 이와 같습니다
그리고 예측을 해보면!!!
1페이즈 ... ㅠㅠ 슬프네요
데이터를 바꿔서 레벨을 180, 그리고 도와줄 플레이어를 소환 해봐도
이 나오네요 ...
그러다 10초 대에 2페이즈 간 플레이어가 많았던 데이터를 기억해서 10초에 죽은 거로 하니
2페이즈를 간걸로 뜨는 ...
흐음... 10초 대에 데이터가 적어서 이런 결과가 나오는 것 같네요
정확도도 낮고 그냥 재미로 보는 프로젝트가 되서 조금 아쉬움을 느끼게 되었습니다
이후로도 더더욱 공부해야할게 많다는 것을 느낀 프로젝트 였습니다