말레니아 데이터셋을 활용한 분석, 예측

godo·2022년 4월 16일
0

서두

우연히 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 : 호스트보다 먼저 죽었는 지

죽음과 관련된 분석

  • 레벨에 따른 죽은 시간의 그래프 인데 크게 상관 관계는 없는 모습을 볼 수 있습니다

  • 다른 플레이어를 소환할 때보다 하지 않았을 때 더 오래 살아남은 것을 볼 수 있습니다

  • 마법과 상태이상을 쓰는 호스트는 더 오래 살지만 하이브리드나 쌩 근접 무기를 사용하는 호스트는 적은 시간 살아있는 걸 볼 수 있습니다
    아마 이건 마법이나 상태이상을 쓰는 플레이어들은 멀리서 안전하게 플레이하려는 경향이 있기 때문이 아닐까 추측됩니다

  • 머 이건 당연한것이지만 페이즈를 더 진행할 수록 더 오래 살아 남는 걸 볼 수 있습니다

페이즈에 대한 분석

이번엔 얼마나 진도, 즉 페이즈의 진행에 관한 분석을 해보겠습니다

  • 이번에도 레벨은 그렇게 큰 상관관계가 없다고 보여 집니다

  • 플레이어를 불러 들일 수록 페이즈가 나가지 않는 모습도 보입니다

  • 0 은 불러온 플레이어가 먼저 죽지 않음, 1 은 먼저 죽음, 2는 부르지 않은 상황인데요
    이 상황을 바탕으로 분석해 보자면 다른 플레이어의 도움은 크게 도움이 되지 않은 것을 볼 수 있습니다

  • 굉장히 신기한 결과가 나왔는 데요, 저번 분석에서 근접, 하이브리드는 적은 시간을 살아남아서 페이즈가 낮을 거 같았는 데 결과는 보시는 바와 같이 오히려 근접, 하이브리드가 더 많이 페이즈를 진행한 것을 볼 수 있습니다

  • 바로 궁금해서 살아남은 시간 대비 페이즈를 봤는 데 상관관계가 없더군요... (머지...)

  • 바로 앞 그래프 보고 적은 시간에 2페이즈 까지 가는 거 보고 그래프가 이상한가 하고 다시 봤는 데 진짜로 2페이즈를 11초도 안 되서 간 경우가 존재 하더군요 더구나 혼자서...
    대단할 뿐

궁극기와 관련된 분석

  • 레벨에 따라 궁극기에 죽은 것을 분석 해봤는 데 이번에도 레벨은 크게 상관관계가 없더군요...

  • 어느 위치에서 궁극기를 맞아 죽었는 지 분석했는 데 가운데에서 많이 죽었드라고요...

  • 궁극기에 맞아 죽지 않았을 땐 가운데 - 바깥 - 안쪽 순의 위치에서 죽었는 데 도대체 무슨 관계가 있는지 모르겠습니다 ㅠㅠ

모델링

위의 분석을 봤을 때 원래는 살아 남는 시간 예상을 하려 했지만
오래 살아 남아 봤자 페이즈가 진행이 되지 않는(도망만 다니는) 모습이 데이터 분석에 보여서 크게 의미 없다고 느껴서
진행 상태를 나타내는 페이즈를 예측 하기로 결정했습니다

도달 페이즈 예측 모델


테스트 스코어가 좋은 KNeighborsClassifier, LogisticRegression, RandomForestClassifier 의 파라미터를 조절해서 가장 좋은 값이 나온 것을 선택하겠습니다

파라미터 결정은 Grid Search 를 이용했습니다

KNeighborsClassifier 결과

Grid Search를 활용해서 파라미터들을 조절하다 보니
결과는 위와 같이 나왔습니

LogisticRegression

로지스틱 회귀 결과는 이와 같이 나왔습니다

RandomForestClassifier

결과는 이와 같이 나왔습니다

예측

위의 결과들을 봤을 때 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초 대에 데이터가 적어서 이런 결과가 나오는 것 같네요

결론

정확도도 낮고 그냥 재미로 보는 프로젝트가 되서 조금 아쉬움을 느끼게 되었습니다
이후로도 더더욱 공부해야할게 많다는 것을 느낀 프로젝트 였습니다

profile
☀️☀️☀️

0개의 댓글