톰 브래디는 일반적으로 NFL 역사상 최고의 쿼터백으로 여겨집니다. 그의 통산 최다 패싱 야드 기록은 그가 보유한 수많은 인상적인 기록 중 하나일 뿐입니다. 이 기록을 달성하기 위해 그는 매년 꾸준히 높은 패싱 야드를 유지했고, 가장 많은 패스 시도와 성공 횟수를 기록했으며, 시즌에 영향을 미치는 부상을 피하고 오랜 기간 선수 생활을 이어갔습니다.
기록은 깨지기 위해 존재하는 것이다.
이 기록을 깰 다음 쿼터백은 이미 현역으로 뛰고 있을지도 모릅니다. 하지만 누구일까요? 그리고 언제일까요?
이 프레젠테이션에서는 데이터 탐색 및 시각화를 통해 톰 브래디가 어떻게 NFL에서 그토록 압도적인 존재감을 갖게 되었는지 살펴보겠습니다. 이어서 현재 활동 중인 쿼터백 중 누가 그의 기록에 도전할 가능성이 가장 높은지, 그리고 언제쯤 그 기록이 깨질 수 있을지 알아보겠습니다.
저희는 웹사이트에서 데이터를 스크래핑하는 JSL 스크립트, 분석을 위해 데이터를 준비하는 데이터 정리 워크플로, 데이터 탐색 및 시각화, 그리고 마지막으로 시즌 내내 업데이트되는 JMP Live 보고서 게시까지 전체 분석 워크플로를 다룹니다.
안녕하세요, 저는 JMP의 시스템 엔지니어인 스콧 앨런입니다. 동료 야스민 하자르와 함께 캐리에서 열리는 디스커버리 서밋 2024에서 저희 포스터를 발표하게 되어 기쁩니다. 올해 초, 야스민과 저는 디스커버리 서밋에 대해 논의하면서 데이터 접근부터 JMP Live에 게시하는 것까지 전체 과정을 아우르는 데이터 시각화 및 분석 워크플로우를 발표하고 싶다는 생각을 했습니다. 저희는 매일 고객들과 함께 일하면서 데이터 가져오기부터 분석, 결과 게시까지 워크플로우를 완전히 자동화하는 것에 대한 관심이 점점 높아지고 있음을 확인하고 있습니다.
이번 프레젠테이션에서는 JMP의 다양한 기능들을 살펴보겠습니다. 웹사이트에서 데이터를 가져오는 방법, 워크플로 빌더를 사용하여 데이터 업데이트 및 정리를 자동화하는 방법, 다양한 JMP 플랫폼을 활용하여 데이터를 시각화, 탐색 또는 모델링하는 방법, 그리고 이러한 결과를 JMP Live에 게시하는 방법을 보여드리겠습니다. 더 나아가, 사용자 지정 추가 기능을 사용하여 버튼 클릭 한 번으로 이 모든 작업을 수행하는 방법도 보여드리겠습니다.
이 프로젝트에서 우리는 전설적인 NFL 쿼터백 톰 브래디를 워크플로우의 배경으로 삼기로 했습니다. 당시 여러 아이디어를 구상하던 중, 그의 압도적인 커리어와 그의 기록들이 오랫동안 깨지지 않을 것이라는 기사를 읽었습니다. 그러면서 '오랜 시간'이란 얼마나 긴 시간일까 하는 생각이 들었습니다. 혹시 이미 다음 기록 경신 쿼터백이 활동 중이라면, 언제쯤 그 기록들에 도전할까요?
톰 브래디는 수많은 NFL 기록을 보유하고 있습니다. 이번 발표에서는 그중 하나인 통산 패싱 야드 기록에만 초점을 맞추겠지만, 동일한 워크플로를 그의 다른 기록에도 적용할 수 있습니다. 저와 야스민은 NFL 열성 팬은 아니었습니다. 누가 기록 경쟁자인지, 누가 후보인지, 누가 기록 보유자가 될 수 있을지 잘 몰랐습니다. 하지만 데이터를 분석하기 시작하면서 톰 브래디가 얼마나 독보적인 선수인지, 그리고 그가 왜 역대 최고의 선수 중 한 명으로 꼽히는지 쉽게 알 수 있었습니다. 이러한 데이터 탐색 여정은 데이터에 접근하는 것에서부터 시작됩니다. 이제 야스민에게 마이크를 넘겨서 시작해 보겠습니다.
감사합니다, 스콧. 저희가 가장 먼저 해야 했던 일은 1940년부터 2023년까지의 모든 통계 자료를 만드는 것이었습니다. 보시다시피 프로 풋볼 레퍼런스 웹사이트에 접속해야 했습니다. 저희는 자체적으로 JSL 스크립트를 만들어서 여기 있는 연도별 변수를 해당 연도로 대체하고, 이 모든 통계 자료를 하나의 큰 원시 데이터 테이블로 통합했습니다. 이것이 저희의 첫 번째 단계였습니다.
그런 다음 워크플로 빌더를 사용하여 워크플로를 만들었습니다. 이 워크플로에서는 먼저 과거 데이터를 열고, 그 안에 현재 주차 통계를 추가합니다. 2024 시즌이 시작되면 이러한 주간 통계를 과거 데이터에 추가할 수 있습니다. 보시다시피, 열 속성 표준화, 경력 연도 추가, 활동 연도 추가, 누적 야드 열 추가 등 여러 추가 단계를 거쳐야 합니다. 이를 통해 모든 야드를 합산할 수 있습니다.
하지만 제가 말씀드리고 싶은 것은, 현재 주 데이터와 과거 데이터를 가져오는 단계와 같은 일부 단계에는 더하기 기호(+)가 표시되어 있다는 점입니다. 이는 해당 단계가 사용자 지정 단계이며, JSL에서 직접 생성하여 워크플로에 사용자 지정 단계로 추가해야 했다는 의미입니다.
이 워크플로를 구축한 후, 현재 주차까지의 모든 정보가 담긴 최신 축구 통계표를 얻게 되었습니다. 그리고 보유하고 있는 시각화 도구를 활용하기 시작했습니다. 첫 번째 그래프는 연도별 누적 야드를 나타낸 것으로, 은퇴한 쿼터백은 회색, 톰 브래디는 보라색, 그리고 현역 쿼터백은 주황색으로 표시했습니다.
우리는 몇몇 쿼터백들이 너무 일찍 은퇴해서 계속 뛰었다면 톰 브래디의 기록을 깼을 수도 있고, 반대로 톰 브래디가 그들의 기록을 깨지 못했을 수도 있다는 것을 즉시 알 수 있습니다. 현역 선수들을 살펴보면, 이미 누적 야드에서 급격한 증가세를 보이는 선수들이 있습니다. 우리는 현역 선수들만을 대상으로, 그들의 커리어 연도를 함수로 하여 그래프를 그렸습니다. 그리고 커리어 연도로 정규화했습니다.
그다음에는 이 선수들 중 누가 앞서 있는지 살펴보았습니다. 애런 로저스가 선두에 있는 것을 알 수 있습니다. 하지만 그는 작년에 힘든 한 해를 보냈고, 이번 시즌에는 어떻게 될지 아무도 모릅니다. 반면에 매튜 스태포드와 러셀 윌슨은 커리어 최고 기록을 기준으로 비교했을 때 이미 톰 브래디보다 더 많은 야드를 쌓았습니다.
두 선수를 같은 커리어 시즌 기준으로 비교한다면, 이미 그들은 그 기준선을 훨씬 앞서 나가고 있습니다. 데릭 카는 이쯤에 있죠. 그는 잘하고 있지만, 아직 커리어 초반입니다. 그래서 우리는 조금 다른 방식으로 살펴보았습니다. 연평균 야드, 즉 쿼터백들의 연평균 야드를 비교해 보는 겁니다. 저스틴 허버트는 연평균 4,300야드라는 놀라운 기록을 보여주며 다른 선수들과 비교했을 때 훨씬 뛰어납니다. 심지어 톰 브래디와 비교해도 한참 뒤처져 있죠.
하지만 여기 다른 그래프를 보시면, 선수들을 동적으로 연결하여 그들의 커리어 초기 단계를 확인할 수 있습니다. 저스틴 허버트는 아직 커리어 초반으로, 누적된 경력이 4년밖에 되지 않았습니다. 이어서 스콧이 저희가 개발한 더욱 정교한 보고서와 모델들을 보여드리겠습니다.
새로운 데이터를 얻었을 때 가장 먼저 해야 할 일은 야스민이 보여준 것처럼 데이터 탐색을 하는 것입니다. 기존 기록에 도전할 만한 후보들을 생각해 보는 또 다른 방법은 클러스터링과 같은 데이터 탐색을 활용하는 것입니다. 여기서는 누적 야드나 연간 야드와 같은 단일 통계뿐만 아니라 모든 특성에서 유사한 쿼터백들을 찾기 위해 계층적 클러스터링을 수행했습니다.
이 경우, 우리는 모든 쿼터백을 그룹화했습니다. 이 데이터 테이블에는 약 800명의 쿼터백이 있는데, 과거 시도 횟수, 패스 성공 횟수, 인터셉션 등 모든 통계를 기준으로 그룹화했습니다. 여기서는 그 결과를 컨스텔레이션 플롯으로 보여줍니다. 이 컨스텔레이션 플롯은 모든 통계에서 유사한 특성을 가진 쿼터백 그룹을 나타냅니다.
여기서 몇 가지 주요 분기점을 볼 수 있는데, 이 분기점들은 쿼터백들을 서로 다른 그룹이나 범주로 구분하기 시작합니다. 톰 브래디가 이 중 어디에 속하는지도 알 수 있죠. 하지만 이것은 그들의 통계나 능력에 대해 아무것도 알려주지 않습니다. 단지 이러한 통계적 특징들이 서로 유사하다는 것을 보여줄 뿐입니다.
톰 브래디가 있는 가지를 확대해 보겠습니다. 이전 그래프에서 보셨을 법한 익숙한 이름들도 있고, 어쩌면 의외의 이름들도 있을 겁니다. 은퇴했거나 더 이상 활동하지 않는 쿼터백들도 포함시켰습니다. 회색 점들이 바로 그 선수들입니다.
보시다시피, 만약 그들이 다른 해에 최고의 기량을 보여줬다면 더 오랫동안 선수 생활을 이어갈 수 있었을지도 모릅니다. 어쩌면 몇몇 기록에 도전할 수 있었을지도 모르죠. 하지만 그들은 더 이상 현역이 아닙니다. 그들이 기록에 도전할 수 있는 기회는 끝났습니다. 이제 톰 브래디의 현재 위치를 보면서, 어떤 다른 쿼터백들이 톰 브래디의 기록에 도전하거나 조금씩 따라잡을 수 있을지 살펴볼 수 있습니다.
다음으로 우리가 하고 싶었던 것은 이 데이터를 모델링하는 것이었습니다. 처음 두 가지 방법, 즉 데이터 탐색과 클러스터링은 데이터를 탐색하고 기록 경신 가능성이 가장 높은 쿼터백을 식별하는 데 중점을 두었습니다. 하지만 언제 기록 경신이 가능할지 예측하려면 모델을 구축해야 했습니다. 이를 위해 사용할 수 있는 모델은 여러 가지가 있는데, 우리는 혼합 모델을 구축하기로 했습니다.
저희는 혼합 모델 특성을 가진 모델 플랫폼을 사용하여 누적 야드를 반응 변수(Y 변수)로, 커리어 야드를 X 변수로 설정하고, 선수 이름을 랜덤 효과로 추가한 후 계수들을 중첩했습니다. 기본적으로 이렇게 하면 각 쿼터백의 연간 누적 야드에 대한 단순 선형 회귀 분석을 수행할 수 있으며, 각 회귀 분석마다 고유한 기울기와 절편을 얻게 됩니다. 이러한 정보를 바탕으로 다양한 회귀 방정식을 얻었고, 이를 통해 역 예측을 할 수 있습니다.
우리는 톰 브래디의 81,294야드 기록에 대한 역 예측값을 사용했습니다. 이 역 예측값을 통해 해당 쿼터백이 누적 야드 기록을 달성하는 데 걸리는 연수를 알 수 있습니다. 이 보고서를 바탕으로 데이터 테이블을 만들고 각 쿼터백의 루키 시즌을 기준으로 정규화했습니다. 오른쪽에 있는 그래프는 각 쿼터백의 기록을 보여줍니다. 이 그래프는 기록 달성에 걸린 연수를 기준으로 오름차순으로 정렬되어 있습니다.
이 경우, 우리가 확인한 두 선수, 애런 로저스와 맷 스태퍼드는 주황색 점으로 표시되어 있습니다. 톰 브래디는 보라색 점으로 표시되어 있는데, 그는 2000년, 그러니까 선수 생활 24년 차에 이 기록을 세웠습니다. (정확한 연도는 2022년쯤이었던 것 같습니다.) 하지만 여기서 볼 수 있듯이 다른 쿼터백들도 이 기록에 도전할 수 있습니다. 물론 애런 로저스와 맷 스태퍼드가 가장 먼저 이 기록에 도전하겠지만, 앞으로 6~7년은 더 걸릴 것입니다. 2031년이나 2032년 시즌쯤에나 볼 수 있을 것으로 예상됩니다. 그들이 계속 뛴다면 커리어 최다 패싱 야드 기록에 근접하기 시작할 수 있을 것입니다.
앞으로 더 앞선 세대의 쿼터백들이 이 기록에 도전할 가능성이 있습니다. 아마 2030년대 후반이나 2040년대 초쯤이 될지도 모릅니다. 하지만 너무 기대하지는 마세요. 당장 그런 일이 일어날 것 같지는 않습니다. 어쨌든 현재로서는 이 기록에 근접한 쿼터백이 없다는 점은 고무적이지만, 미래에는 그럴 가능성이 있는 선수들이 여럿 있습니다. 이제 데이터를 분석했으니, 이 데이터를 어떻게 공개하고 공유할지, 그리고 전체 워크플로우를 어떻게 자동화할지 보여드리겠습니다.
그 부분은 야스민에게 넘겨서 도움을 받도록 하겠습니다.
감사합니다, 스콧. 스콧이 말했듯이, 저희 목표는 시즌이 진행됨에 따라 보고서의 변화를 사람들이 확인할 수 있도록 이러한 보고서들을 JMP Live에 게시하는 것이었습니다. 이를 위해 저희는 파일 > 게시 > JMP Live에 보고서 게시를 선택하기만 하면 되었습니다. 원하는 보고서를 선택했죠. 제 경우에는 몇 개의 이미지나 그래프로 구성된 대시보드가 있었는데, JMP Live의 데이터 테이블을 해당 프로 미식축구 웹사이트의 통계로 업데이트된 테이블로 교체했습니다.
한 단계 더 나아가, JMP Live에 게시하는 단계를 포함한 모든 과정을 추가 기능으로 통합했습니다. 추가 기능을 만드는 방법은 매우 간단하기 때문에, 다른 사람들과 공유하고자 이 글에서는 추가 기능 생성 단계를 보여드리겠습니다. 추가 기능을 만들려면 파일, 새로 만들기, 추가 기능을 클릭합니다. 추가 기능을 만들 버튼 아래에 워크플로 빌더에서 내보낸 JSL 스크립트를 복사하여 붙여넣습니다. 워크플로 빌더에서 워크플로를 생성한 후 JSL 스크립트를 내보낼 수 있으며, 이 스크립트를 복사하여 붙여넣으면 됩니다.
한 단계 더 나아가, 해당 추가 기능을 추가 기능 메뉴에서 분리했습니다. 사용자 지정 메뉴를 만들어 사용자가 해당 버튼을 더 쉽게 클릭할 수 있도록 했습니다. 이제 그 과정을 간단히 보여드리겠습니다. 여기 사용자 지정 메뉴가 있습니다. '실행 통계'를 클릭하면 현재 연도가 업데이트되는 것을 볼 수 있습니다. 표의 열 등이 표준화되어 표시됩니다.
최상위 레이어를 포함한 테이블의 하위 집합을 생성합니다. 여기에 대시보드가 생성되었습니다. JMP Live를 간단히 보여드리겠습니다. 자동으로 새로 고쳐지면서 연평균 야드와 선수별 야드에 대한 최신 통계가 표시됩니다. 게시 및 추가 관련 내용은 여기까지입니다. 마지막으로 스콧에게 의견을 들어보도록 하겠습니다.
이로써 데이터 접근, 정리, 그래프 작성, 모델링, 게시까지 전체 워크플로를 살펴보았습니다. 함께 따라하고 싶으시다면, 이 대시보드를 JMP Public에도 게시할 예정이며, 흥미로운 다른 그래프 몇 개도 함께 추가할 계획입니다. 대시보드가 게시되면 JMP Public 사이트 링크를 커뮤니티에 공유하겠습니다.
여기서 보신 내용에 대해 더 자세히 알고 싶으시다면, 저희는 단지 개괄적인 내용만 살펴본 것입니다. 스크립트와 분석 내용을 간단히 훑어본 정도였죠. 더 궁금한 점이 있으시면 커뮤니티에 질문을 남겨주세요. 기꺼이 답변해 드리겠습니다. 이 자리를 빌어 이번 포스터 발표 기회를 주신 JMP에 감사드립니다. 그리고 이 프로젝트를 함께 진행해준 야스민에게도 감사드립니다. 정말 즐거운 시간이었고 많은 것을 배울 수 있었습니다.
감사합니다.