샘플프로젝트 : 게임 어뷰즈 유저 이상 탐지하기
: FPS 게임을 운영하는 도중 버그유저가 증가하고 있다. 게임 플레이 데이터를 활용하여 이러한 버그 의심 유저로 판단되는 유저를 찾고 페널티 정책을 수립하고자 한다.
| Column | Description |
|---|---|
| groupId | 그룹ID |
| matchId | 경기ID |
| assists | 서포트횟수 |
| boosts | 부스트 아이템 사용횟수 |
| damageDealt | 총 입힌 데미지 |
| DBNOs | 적을 기절시킨 횟수 |
| headshotKills | 헤드샷킬수 |
| heals | heal 아이템 사용횟수 |
| killPlace | 적을제압한위치 |
| killPoints | 적제압포인트 |
| kills | 적 제압횟수 |
| killstraks | 가장 많이 적 제압횟수 |
| longestKill | 멀리서 적 제압횟수 |
| maxPlace | 최악의배치넘버 |
| numGroups | 그룹넘버 |
| revives | 부활횟수 |
| rideDistance | 이동수단 타고 이동거리 |
| roadKills | 이동수단으로 적 제압횟수 |
| swimDistance | 수영한거리 |
| teamKills | 같은팀 제압횟수 |
| vehicleDestroys | 자동차 파괴횟수 |
| walkDistance | 도보이동거리 |
| weaponsAcquired | 무기 획득횟수 |
| winPoints | 승점 |
| winPlacePerc | 승률 |
(1) Data shape 확인
(2) Data type 확인
(3) Null값 확인
(4) Outlier 확인
#(1)
print ('df: ', df.shape)
#(2)
df.info()
#(3)
print (df.isnull().sum())
df [ df ['winPlacePerc'].isna() ].head() ##Null값 존재 row 확인
df = df.dropna()
#(4)
df.describe()
#기본정보
for i in ['id', 'groupId', 'matchId']:
print (f'unique [{i}] count:', df[i].nunique()
#boxplot 통한 kills수와 승률 관계정보 확인
kills = df.copy()
kills['killsCategories'] = pd.cut ( kills['kills'], [-1,0,2,5,10,60], labels=['0_kills', '1-2_kills', '3-5_kills', '6-10_kills', '10+_kills'])
plt.figure (figsize=(15,8))
sns.boxplot (x='killsCategories', y='winPlacePerc', data=kills)
plt.show()
#joint plot 통한 val1, val2 관계 확인
sns.jointplot (x='winPlacePerc', y='headshotKills', data=df, height=10, ratio=3)
plt.show()
total distance v.s. headshotkill rationumber of heals usage v.s. number of killsheadshotkill ratio v.s. kill rationumber of heals usagetotal distance v.s. number of weapons acquiredtotal distance <= distance quantile(0.1) v.s. headshotkill ratio >= 0.8heals usage quantile(0.1) v.s. kills over 6 sigmaheadshotkill ratio v.s. kill ratio over 6 sigmanumber of heals usage over averagemimimal total distance v.s. number of weapons acquired over average