Pendahuluan untuk Pendahuluan

Makalah dan proyek ini diselesaikan untuk final pembelajaran mesin beberapa bulan sebelumnya. Ada banyak penjelasan tentang bisbol dan cara kerja Statcast— hal itu diperlukan untuk profesor saya. Proyek ini juga merupakan spin-off dari pitch grader saya, yang saya tulis di sini.

Karena ini dikerjakan dengan timeline yang lebih singkat, hasilnya lebih merupakan bukti konsep tetapi tetap ingin membagikannya dan mempostingnya secara online!

Pendahuluan

Ada peningkatan penerimaan ilmu data dalam olahraga, khususnya bisbol, dalam sepuluh tahun terakhir ini. Kamera dan sistem pelacakan berteknologi tinggi telah digunakan oleh tim-tim di Major League Baseball untuk mendapatkan wawasan tentang penerbangan bola, mengumpulkan metrik seperti putaran, kecepatan, dan pergerakan lemparan serta kecepatan keluar dan sudut peluncuran bola yang dipukul.

Peningkatan teknologi ini memungkinkan analisis prediktif dan kemampuan mengukur kinerja pemain di luar statistik penghitungan tradisional. Beberapa proyek yang merupakan pokok dalam analisis bisbol adalah penilai lapangan, kinerja bola yang diharapkan, dan proyeksi peningkatan pemain.

Masalah

Seringkali, alat melihat pemukul atau pelempar secara independen satu sama lain; namun, apakah mungkin untuk memanfaatkan data yang sama dan memprediksi hasil antara pertarungan pelempar dan pelempar? Dengan kata lain, bagaimana para pemukul berinteraksi dengan lemparan yang berbeda dan bagaimana seorang pelempar dapat menggunakan informasi tersebut untuk keuntungan mereka?

Misalnya, jika Houston Astros mendekati Ryan Pressley untuk menyelesaikan permainan, lemparan apa yang akan dilakukan Pressley terhadap pemukul lawan untuk mendapatkan hasil terbaik? Atau, jika Pressley bukan pilihan terbaik melawan para pemukul yang akan datang, siapa lagi di bullpen yang dapat digunakan?

Mampu menganalisis pertarungan pitcher-hitter membantu tim membuat keputusan saat mengatur susunan pemain mereka melawan starter lawan atau mencari tahu pitcher mana yang terbaik dalam memberikan bantuan dalam situasi tertentu.

Data dan Pemrosesan Awal

MLB adalah salah satu dari sedikit, jika bukan satu-satunya, liga yang memiliki kumpulan data publik dari banyak metrik yang dikumpulkan selama pertandingan. Angka-angka ini dapat ditemukan dan diunduh di Baseball Savant, dasbor liga dan tempat penyimpanan statistik tersebut. Untuk menyederhanakan proses pengumpulan dan perselisihan data, fungsi “statcast” dari paket Python “baseball_scraper” digunakan. Ini mengumpulkan sekitar 700.000 lemparan dari musim 2022, masing-masing dengan metrik lemparan (mis. kecepatan, gerakan vertikal/horizontal, laju putaran), metrik pukulan (mis. sudut peluncuran, kecepatan keluar, sudut semprotan), dan variabel kontekstual (inning, bola , pemogokan).

Untuk menilai kualitas sebuah pitch atau event dalam skala kuantitatif yang berkesinambungan (daripada menggunakan nilai kualitatif (strikeout, base hit, dll), nilai run akan digunakan. Nilai run adalah jumlah run pada event tertentu bernilai rata-rata, sepanjang musim. Hal ini dihitung dengan mengelompokkan event ke dalam kategori yang lebih umum dan kemudian menggunakan kolom “delta_run_exp” di log pitch Savant untuk menemukan perubahan rata-rata dalam run dari kategori tersebut. Kategori event dikelompokkan berdasarkan jenis bola yang dipukul (terbang, bola tanah, penggerak garis, lalat pop) dan bola yang tidak dipukul (berbagai jenis pukulan, bola). Misalnya, penggerak garis bernilai lari paling banyak, sedangkan popup (yang hampir selalu diterjunkan) untuk jalan keluar) paling tidak bernilai.

Selain menetapkan nilai run pada event, variabel kategori bola, pukulan, dan lokasi lemparan (zona) juga dikodekan.

Metodologi

Awalnya direncanakan untuk melatih model untuk setiap pemukul unik dan menjalankan lemparan pelempar melalui model tersebut untuk memahami sepenuhnya kekuatan dan kelemahan pemukul serta rencana permainan yang sesuai. Namun, setelah eksperimen awal, masalah ukuran sampel muncul karena para pemukul melihat sekitar 1.000 lemparan sepanjang musim penuh (Rhys Hoskins dari Phillies memimpin liga dengan 1.601). Selain itu, ukuran sampel yang lebih kecil dari setiap pemain berarti ansambel yang lebih kuat tidak dapat digunakan.

Pengelompokan Pemukul

Untuk mengatasi masalah ini, para pemukul dikelompokkan ke dalam kelompok yang lebih besar berdasarkan kinerja mereka terhadap lemparan, penggunaan pelempar, dan lokasi yang berbeda. Untuk setiap pemukul, nilai lari rata-ratanya terhadap lemparan di zona 1–9, jenis lemparan (bola cepat, bola pecah, kecepatan di luar kecepatan), dan dalam hitungan berbeda (genap, pelempar/pemukul di depan, 2 pukulan) dihitung, dibagi dengan melawan pelempar tangan kanan dan kiri.

Setelah data ini dihitung, pengelompokan K-Means digunakan untuk menemukan kelompok pemukul yang lebih umum. Empat K-Means digunakan (R/LHP vs R/LHH) untuk mengidentifikasi tipe pemukul dalam skenario pertarungan yang berbeda. Grup dibuat dengan menguji “n_clusters” yang berbeda secara rekursif dan menemukan cluster yang memiliki skor siluet tertinggi. Hal ini menghasilkan sembilan subgrup dari seluruh pertarungan pada musim 2022 dan jika model dilatih pada masing-masing grup tersebut, tidak akan ada masalah dengan ukuran sampel dan model yang lebih besar dan lebih kuat dapat digunakan untuk pemodelan pertarungan. tugas. Setiap pemukul akan memiliki dua kelompok, masing-masing melawan pelempar tangan kiri dan kanan.

Pemilihan Model

Sebuah kelompok dari salah satu dari sembilan cluster (salah satu dari RvR) dipilih untuk menjalankan pemilihan model dan validasi silang untuk memutuskan mana yang paling sesuai. Fitur-fitur berikut dipilih:

  • release_speed: seberapa cepat bola dilempar dalam mil per jam
  • release_spin_rate: kecepatan bola berputar, dalam putaran per menit
  • release_extension: perpanjangan pitcher ketika melangkah maju dalam pengiriman, dalam satuan kaki
  • spin_axis: sumbu di mana bola berputar, dalam derajat
  • pfx_x/pfx_z: pergerakan nada vertikal dan horizontal, dalam satuan kaki
  • release_pos_x/release_pos_z: koordinat titik pelepasan pelempar, dalam satuan kaki
  • bola/pukulan: data kategorikal dikodekan
  • R/L: nilai lari rata-rata pemukul lawan per 100 lemparan melawan L/RHP (tergantung pertarungan)
  • zona: lokasi nada, dikodekan
  • rv (variabel respons): menjalankan nilai

Karena hanya ada sedikit variabel untuk setiap promosi (dan dengan pengalaman sebelumnya bekerja dengan kumpulan data ini), pemilihan fitur tidak dilakukan sebelum pelatihan. Jenis lemparan juga tidak disertakan karena harus terwakili secara adil oleh gerakan, putaran, dan kecepatan.

Nilai-nilai tersebut diskalakan menggunakan objek StandardScaler dan Pipeline dan kemudian diuji dalam model Linear, Ridge, Random Forest, Decision Tree, dan XGBoost. Untuk validasi silang Random Forest, Decision Tree, dan XGBoost dilakukan pada hyperparameter max_ depth menggunakan GridSearchCV. Satu set pelatihan yang terdiri dari 75% baris digunakan untuk membuat model dan sisanya digunakan sebagai pengujian. Meskipun Random Forest mengungguli XGBoost pada set pengujian, XGBoost adalah model pilihan karena waktu pelatihannya jauh lebih sedikit dan perbedaan antara skor R2 tampaknya tidak signifikan.

Tidak mengherankan jika model linier memiliki kinerja yang buruk, karena tidak ada hubungan linier antara beberapa variabel seperti putaran dan vektor pergerakan. Pohon keputusan kemungkinan besar akan melebihi data pelatihan, bahkan dengan penskalaannya. Hal ini diatasi dengan hutan acak, yang rata-rata menghasilkan beberapa pohon keputusan yang juga menangkap potensi kebisingan; hal yang sama juga berlaku untuk model XGBoost. Meskipun ada bahaya XGBoost menjadi algoritma “kotak hitam” dan menyebabkan atau menyiratkan korelasi antar variabel yang sebenarnya tidak ada, hal ini tidak terlalu mengkhawatirkan karena skor serupa yang ditunjukkan dengan Random Forest.

Mengingat skor R2 yang tampaknya rendah, hal ini seharusnya tidak menjadi masalah besar karena proyek ini pada dasarnya menjadi pitch grader yang tersegmentasi di antara berbagai jenis pemukul. Dengan mengelompokkan pertarungan ke dalam subkelompok, individu yang memukul akan keluar dari persamaan sampai batas tertentu. Skor R2 sekitar 0,1/0,11 menyiratkan bahwa apa yang dilempar pelempar hanya sepuluh persen dari hasil lemparan yang terlihat benar jika dilihat secara kasat mata. Ada variabel lain seperti faktor pemukul, faktor angin dan taman, serta pertahanan yang mempengaruhi hasil suatu pertandingan. Selain itu, meskipun prediksi pasti dari setiap penawaran tidak sempurna, tujuan dari proyek ini adalah untuk menentukan peringkat opsi penawaran yang berbeda dan bukan untuk menemukan hasil pastinya.

Implementasi

Untuk menghemat waktu, hanya tiga kelompok RvR yang diimplementasikan. Objek pipeline dari model scaler dan XGBoost dibuat dan divalidasi silang dengan GridSearchCV, mencari melalui “max_ depths” antara 5 dan 15. Model ini kemudian disimpan sebagai file .sav menggunakan paket Pickle untuk kemudahan akses di masa mendatang, baik untuk dijelajahi atau tes. Tindakan ini menyimpan parameter yang disetel serta StandardScaler untuk menyederhanakan pra-pemrosesan yang diperlukan untuk memprediksi nilai dengan model ini pada kumpulan data apa pun.

Ciri terpenting dalam menentukan efektivitas suatu nada adalah nada itu sendiri, dimulai dengan pergerakan (pfx_x/z) dan kecepatannya. Sudut pelepasan dan perpanjangan kendi tidak begitu penting.

Hasil dan Analisis

Ide dari alat ini adalah untuk mendapatkan rekomendasi lemparan yang harus diurutkan selama pertarungan, jadi meskipun skor dan performa model terlihat bagus, inilah saatnya untuk menguji kepraktisannya dengan bantuan aplikasi baris perintah.

Seorang pelempar dan pemukul dipilih, kata Ryan Pressley (RHP) dan Travis d’Arnaud yang belum pernah berhadapan di musim 2022. Metrik Pressley dirata-ratakan untuk setiap lemparan yang dia lempar (fastball, slider, curveball, changeup), dan nilai lari rata-rata d'Arnaud terhadap RHP dan grup diambil.

Lemparan Pressley diprediksi di setiap zona (1–9) dan setiap pukulan bola dihitung (12 kombinasi) dengan model RvR Grup 2 (yang dimiliki oleh d'Arnaud). Hal ini mengakibatkan 432 nilai run opsi pitch potensial diprediksi.

Langkah selanjutnya adalah mencari tahu nada mana yang merupakan pilihan terbaik. Fungsi lain dibuat untuk menghitung jumlah pukulan bola, memfilter kerangka data pertarungan yang diprediksi untuk lemparan tersebut, dan memberi peringkat berdasarkan nilai lari.

Lima kombinasi lokasi lapangan teratas disarankan dengan nilai lari yang diharapkan (xrv) masing-masing. XRV+ dari sebuah lemparan yang merupakan perbandingan nilai lari lemparan tersebut dengan rata-rata pertarungan, yaitu 100. XRV+ sebesar 110 menyiratkan bahwa lemparan tersebut sepuluh kali lebih baik daripada lemparan rata-rata yang dilempar di semua pertarungan RvR Grup 2. Melihat hal ini, pertarungan Ryan Pressley versus Travis d'Arnaud sangat menguntungkan, terutama jika Pressley lebih banyak berlatih dengan bola pemecahnya (slider, curveball).

Di sisi lain, jika pelempar di bawah standar, seperti Jeurys Familia (rata-rata lari yang diperoleh 6,09 vs 2,98 dari Pressley), menghadapi d'Arnaud, hasil yang diprediksi tidak akan terlihat bagus, apa pun jenis lemparannya. Jadi, jika seorang manajer memiliki Pressley dan Familia yang tersedia di bullpen mereka untuk menghadapi d’Arnaud, maka Pressley akan menjadi pilihannya. Melihat nilai xrv+, Pressley kemungkinan akan mendapatkan hasil 10% lebih baik daripada Familia. Selain itu, dari sudut pandang pemeriksaan kewarasan, hal ini bagus untuk dilihat.

Pemikiran Akhir, Pekerjaan Masa Depan

Meskipun hasil keseluruhan dari proyek ini menggembirakan dan menarik untuk dieksplorasi, ada beberapa area perbaikan yang dapat terus dikembangkan.

Sesuatu yang perlu terus digali adalah bagaimana pemukul atau pertarungan dapat menjadi kelompok ketika menemukan kelompok pertarungan sebelum pelatihan. KMean hanya menemukan dua grup berbeda untuk semua pertarungan kecuali RvR, yang dibagi menjadi pemukul yang lebih baik dan lebih buruk setelah diselidiki lebih lanjut. Hal ini disebabkan oleh pemukul yang memiliki nilai lari lebih tinggi karena jaraknya lebih dekat dengan pemukul lain, sehingga secara alami menciptakan kluster berbasis tingkatan ini.

Demi waktu, kelompok-kelompok ini digunakan untuk pemodelan tetapi ada beberapa metode untuk terus bereksperimen. Cara pertama adalah menggunakan algoritme pengelompokan yang berbeda, cara lainnya adalah menjalankan pengelompokan pada klaster untuk menemukan grup yang lebih berbeda dalam hal keputusan ayunan/zona dan preferensi nada.

Proses prediksi juga merupakan sesuatu yang dapat ditingkatkan. Sesuatu yang diamati adalah bahwa semua nilai prediksi berdekatan satu sama lain, hal ini karena kecilnya kemungkinan prediksi outlier ketika satu nada sedang diuji. Solusi untuk hal ini adalah dengan membuat sampel lemparan secara acak di suatu zona dan memanfaatkan koordinat x dan y dari zona strike, lalu membuat rata-rata hasilnya.

Terakhir, validasi silang pada hyperparameter lain akan diuji, seperti n_estimators. Menjalankan GridSearchCV dengan beberapa parameter dapat memakan waktu berjam-jam per model dan demi kepentingan timeline proyek ini, hanya max_ depth yang divalidasi silang.