데이터 마이닝으로 K리그 영플레이어상 예측하기

2016. 2. 5. 22:46사는게 뭐길래/Data & Intelligence

회사에서 숙제 받았습니다. 제가 하는 일 중에 뭔가 다른 사람들에게 알려서 마케팅에 도움이 될만한 글 좀 써보라고… 그래서, 축구 + 데이터 마이닝으로 함 찾아봤습니다~~

‘넷스루’라는 회사 한 번 새겨주십사~~^^



K리그에서는 매년 시즌이 끝난 후 영플레이어상과 MVP(최우수선수상)를 시상합니다.  종목에 따라 신인상이라고도 하는데 굳이 영플레이어라고 하는 이유는 데뷔 첫해의 신인뿐만 아니라 데뷔 3년차 이하의 선수들까지 수상 대상자로 하기 때문입니다. MVP는 대부분 우승 팀에서 수상자가 나오기 때문에 어느정도 뻔한 결과가 나오는 편이지만 영플레이어상은 이에 비해 객관적인 성적이 많이 반영되는 편입니다.  


그렇다면, 데이터 분석 기법을 이용하여 여러 후보중에서 누가 영플레이어상을 수상할 것인지 예측할 수 있을까요? 소위 데이터 마이닝이라고하는 멋진 기술들이 있는데 말입니다! 데이터가 그리 복잡할 것 같지도 않고 어지간한 축구팬이라면 대충 어떠어떠한 변수들이 작용하는지도 짐작이 가능할 것 같습니다.


먼저 어떤 데이터가 필요한지 살펴보겟습니다. 어떻게 분석할 것인가도 중요하지만 어떤 데이터를 가지고 분석할 것인지도 매우 중요합니다. 일단 신뢰할만한 데이터 집합을 갖추게 되면 여러가지 분석 기법을 적용해가면서 최적의 결과를 찾아갈 수 있습니다. (분석하고 결과를 살펴보고 데이터를 보강하거나 변형하고, 다시 분석하고 결과를 살펴보고… 될때가지 반복^^) 분석에 대한 감과 경험, 어느정도의 통찰력을 가지고 데이터를 분석하게 되면 훨씬 빠르게, 또한 품질도 좋은 결과를 얻을 수 있겠지요.


어떤 데이터를 분석할까...

영플레이어상에 영향을 미치는 요소는 무엇이 있을까요?

기본적으로 경기출전 횟수, 득점수, 도움수 등 그 해의 리그 성적이 가장 중요할 것이며 선수가 속한 팀의 리그 순위도 변수가 될 수 있습니다.  또한 미디어 노출 빈도가 높고 유명한 선수일수록 수상 가능성도 높을 수 있습니다. (유명하기 때문에 표를 더 받을 수도 있고, 수상 가능성이 높고 출중한 선수이기 때문에 유명할 수도 있고요.) 미디어 노출 빈도를 정확하게 측정할 수도 있겠으나 국가대표로 많이 출전하면 그 만큼 미디어의 주목을 받는다고 가정하여 대표팀 출전횟수를 변수로 선택할 수 있겠네요. 일반적으로 공격수가 골이나 도움을 더 많이 기록하며 축구팬들과 미디어의 주목을 더 받는 경향도 있으니 선수의 포지션도 하나의 변수가 될 것 같습니다.


각 선수별로 데뷔년도 및 데뷔 3년 이내의 리그 성적, 수상자 선정 시점까지의 대표팀 출전기록, 그리고 영플레이어상 수상 여부 데이터를 준비하면 될 것 같네요. 지금까지 K리그를 거쳐간 모든 선수들에 대해 조사하면 좋겠지만 번거롭기도할 뿐더러 데이터가 많다고 꼭 유리한 것만은 아닙니다. 정확한 분석을 위해서라면 가급적 풍부한 데이터가 좋겠지만, 영플레이어상 수상자를 맞추는 것처럼 어떤 결과를 예측하기 위한 모델을 만들 때에는 데이터의 질적인 부분도 중요합니다.


이런점을 고려하여 K리그 출범이후 각 시즌별 영플레이어상 후보군에 속하는 선수를 3~4명 정도씩 뽑아서 분석 데이터를 만들어 보겠습니다. 예를 들어, 각 시즌별로 4명씩 후보군을 선정한다면 이 중 한 명이 수상자이고 나머지 세 명은 수상하지 못한 선수들로 구성합니다. 1985년부터신인상 수상이 시작되었으니 대략 30년 동안의 데이터를 모은다면 120건 정도가 되겠네요. 높은 정확도, 그리고 여러가지 다양한 변수 상황에서도 잘 맞추는 예측모델을 만들기에는 부족하지만 어느정도 예측 수준과 예측에 영향을 미치는 주요 변수를 찾아낼 수는 있을 것 같습니다.


데이터 수집

그러면 데이터를 모아볼까요? 선수별 프로리그 출전 기록은 프로축구연맹 홈 페이지에서 구할 수 있고 대표팀 출전 기록은 대한축구협회 홈 페이지에서 구할 수 있습니다. 자동화된 수집기를 사용할 수도 있겠지만 몇 백건 되지 않는 정도의 데이터는 거침없이 마우스 클릭과 드래그, 복사&붙여넣기로 해결하는게 빠르고 편합니다. 그리고, 각 시즌별 영플레이어상 후보는 해당 년도의 스포츠 기사를 참조해도 좋겠으나 그 자료도 구하기가 그리 간단하지는 않죠. 검색으로 구할 수 있는 것은 구하고 구할 수 없는 시즌의 후보군은 K리그 20년 팬의 경험을 바탕으로 직접 선정하면 될 듯합니다.^^


이렇게해서 대략 다음과 같은 데이터가 준비되었습니다(일부 발췌). “득점+도움”은 득점수와 도움수를 합한 것이고 “대표합”은 대표팀 출전수를 모두 합한 것입니다. 시즌, 이름, 소속팀은 데이터를 식별하기 위한 것으로 실제 분석에서는 사용하지 않습니다.


시즌

선수

소속팀

포지션

팀순위

출전수

득점수

도움수

득점

+

도움

A-대표

U-23

U-20

U-17

대표합

수상여부

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

2010

윤빛가람

경남

2

6

29

9

7

16

3

5

0

26

34

1

2010

홍정호

제주

1

2

21

1

1

2

3

6

24

0

33

0

2010

조재철

성남

2

4

33

4

2

6

0

0

0

0

0

0

2010

지동원

전남

3

10

26

8

4

12

1

6

9

0

16

0

2011

이승기

광주

2

11

27

8

2

10

2

0

0

0

2

1

2011

고무열

포항

3

3

28

10

3

13

0

2

0

0

2

0

2011

윤일록

서울

3

5

26

4

6

10

0

2

15

11

28

0

2012

*이명주

포항

2

3

35

5

6

11

0

2

0

0

2

1

2012

박선용

전남

2

11

36

2

0

2

0

0

0

0

0

0

2012

이한샘

광주

2

15

29

2

0

2

0

0

0

0

0

0

2013

*고무열

포항

3

1

34

8

5

13

2

2

0

0

4

1

2013

이석현

서울

2

4

33

7

3

10

0

1

0

0

1

0

2013

한교원

인천

2

7

36

6

2

8

0

0

0

0

0

0

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...


여기서 우리가 예측하고자 하는 변수는 “수상여부”입니다. 즉, “수상여부”를 제외한 나머지 값들을 알고 있을 때, 해당 선수가 영플레이어상을 수상할 것인가(1) 그렇지 않을 것인가(0)를 예측하고자 합니다. 데이터들이 모두 숫자로 처리된 부분에 주목! 가령, 선수의 포지션에서 수비수는 1, 미드필더는 2, 포워드는 3으로 표현하였습니다. 숫자형 데이터가 여러 측면에서 더 편리하기 때문입니다.

별(*)표한 선수들도 주목할 필요가 있습니다. 그냥 머... 포항 스틸러스 선수들입니당~ ㅎㅎ


눈으로 훑어봐? 좀 더 그럴싸한 방법으로…

위와 같은 표를 몇 번 훑어보면 대략 어떤 변수의 어떤 값이 영향을 미치는지 파악할 수 있을겁니다. 물론 정확하지는 않겠지만, 분명히 어느정도 변별력 있는 근거는 찾을 수 있을 겁니다. 예를 들어, “한 시즌 10골 이상 득점한 선수라면 수상 가능성이 좀 높다” 정도의 예측은 가능하겠지요. 이렇게 눈으로 몇 번 훑어보고 골똘히 생각해서 얻은 내용도 일종의 예측 모델 중 하나일겁니다.

데이터 수가 그리 많지 않다면, 또는 예측에 결정적인 영향을  미치는 변수가 쉽게 눈에 띈다면 눈으로 훑어보면서 생각하는 작업을 통해서도 예측 모델이나 규칙을 발견할 수 있겠지요. 또는 엑셀이나 DBMS를 사용한다면 조금 더 효과적으로 예측에 도움이 되는 변수와 패턴을 찾을 수도 있을 것이구요.

그러나, 데이터 마이닝이나 통계 기법에서 제공하는 여러가지 예측 도구를 사용하면 이러한 작업을 훨씬 편리하고 폼나게 할 수 있습니다. 많은 데이터를 다룰 수도 있을뿐더러 더 빨리 패턴을 찾아주며 어느정도 일관성 있는 결과를 제공합니다. 게다가 이러한 분석 도구들은 적절한 시각화(Visualization) 도구까지 제공하며 예측 정확도도 측정할 수 있습니다. SAS나 SPSS 같은 상용 분석도구나 R과 같은 공개 소프트웨어에서 이러한 기능을 훌륭하게 제공하고 우리가 자주 사용하는 Excel에서도 일부 기능을 제공합니다. 직접 프로그래밍을 할 수 있다면 Java나 Python에서 제공하는 라이브러리를 이용하는 것도 가능하구요.


위의 데이터 테이블처럼 각 데이터 항목별 특징을 나타내는 속성값(포지션, 출전수, 득점수, 등)을 이용하여 어떤 결과(수상여부)를 예측할 때 사용할만한 기법은 여러가지가 있습니다. Decision Tree, Random Forest, Naive Bayes Classifier, Linear Regression, Logistic Regression, ...  (이것보다 더 많은 기법들이 있겠지만 제가 사용해본, 그리고 대략 아는 것들은 요기까지^^)


데이터의 형식이 숫자형(Numerical)인지 범주형(Categorical)인지에 따라 적절한 변형이 필요하기도 하고  적용할 기법도 달라질 수 있다. 예를 들어, 우리가 풀려는 문제처럼 “수상여부(범주)”를 예측하는 것과 “예상 득점수(숫자)”를 예측하는 것은 차이가 있습니다. 대개 범주형 데이터를 다룰 때는 Decision Tree나 Random Forest, Logistic Regression을 사용하며 숫자형 데이터를 다룰 때는 다른 기법을 사용하지만, 여러가지 기법을 다양하게 테스트 해 보면서 최적의 예측 모델을 찾아가면 된다.


학습 = 예측모델 찾기

예측을 하기 위해서는 예측 모델이 필요합니다. 예측 모델이란 여러 변수들이 서로 어떻게 작용해서 결론이 내려지는가를 요약한 일종의 판단 기준입니다. 우리가 수 많은 경험을 통해서 현명한 판단을 내리는 것처럼 일반적으로 이러한 예측 모델도 다양한 케이스의 데이터를 분석하여 얻어집니다. 소위 기계학습이나 데이터 분석을 통해서 우리가 찾아내려는 것이 바로 이러한 예측 모델이나 규칙입니다.


여러가지 예측 기법 중에서 Decision Tree를 이용하여 예측 모델을 만들어 보겠습니다. 요즘 많이 사용하는 데이터 도구인 R을 이용하였습니다. 보통 100개의 데이터가 있으면 70개나 80개로 예측 모델을 만들고, 나머지 30개 또는 20개로 테스트합니다. 70~80개 문제로 공부를 시키고 나머지 20~30개는 시험 문제로 출제하는 식입니다.

아래 그림은 전체 122개 데이터 중에서 무작위로 선택한 83개(약 70%)의 데이터를 분석하여 얻는 Decision Tree입니다.




노란색으로 표시한 부분을 주목하시기 바랍니다. 해당 시즌 득점수와 도움수 합이 10 이상이고(9.5보다 크니까. 0.5골은 없으니까^^), A 대표팀 경기에 1경기 이상 출전했으며, 도움수가 5개 이상인 선수 12명은 100% 영플레이어상을 수상했습니다. 트리의 반대편을 봐도 흥미롭습니다. 해당 시즌 득점수와 도움수 합이 9 이하이고 시즌 출전횟수가 34회 이하인 44명의 선수는 단 한명도 영플레이어상을 수상하지 못했습니다. 무작위로 선택한 학습용 데이터이기 때문에 모든 경우를 대변하지는 못하지만, 축구팬이라면 어느정도 수긍할 수 있는 판단기준을 제공하는 것 같습니다. 저렇게 생긴 판단기준 또는 분류기준을 “Decision Tree”라고 하며, 이것이 바로 예측모델입니다. 몇 차례 실험을 해 보았더니 대략 70% 수준의 예측 정확도를 보이는 Decision Tree를 얻을 수 있었습니다.


이러한 기계적인 예측이 대부분 잘 맞춘다고 보기는 어렵겠죠. 되기도하고 안되기도하고... 잘 되는 분야도 있고 아닌 분야도 있고요. 하지만, 영플레이어상 예측 문제처럼 어떤 결론을 설명하는 변수들이 존재하고, 여러가지 케이스별로 잘 수집된 데이터가 있다면 비슷한 예측방법을 적용할 수 있을겁니다. 한 번에 뭔가 획기적인 것을 찾아 낸다기 보다는 일상적인 예측과 분석을 통해 우리의 일을 줄여주거나, 또는 우리의 판단을 뒷받침해주는 정도는 충분히 할 수 있을 것 같습니다. 무엇보다도 이러한 분석작업이 최근에는 훨씬 쉽고 간편하고 뽀대나게 된다는 점을 말씀드리고 싶네요.



맞출 수 있을까?

그렇다면, 이렇게 얻은 Decision Tree를 이용하여 2015년 K리그 영플레이어를 선정한다면 누가 될까요? 과연 제대로 맞추기는 할까요?

...

이재성 100%

손준호 0%

권창훈 57%

황의조 57%

수상자는… 검색해 보시기 바랍니다.^^


포항 스틸러스의 심장 같은 손준호 선수의 수상 가능성을 빵퍼로 예측하다니… ㅠ.ㅠ

어쨌든 어느 정도 맞출 수는 있을 것 같습니다. 2016 시즌이 끝날 때 다시 한 번 해 봐야겠습니다...만… 보나마다 포항 스틸러스의 손준호 선수가 탈 것 같습니다.^^