Hasilnya ‘gak mengagetkan sih…
Pesan sponsor: seluruh konten dan kode yang saya tulis akan selalu free of charge dan dapat digunakan oleh siapa saja. Apabila Anda merasa terbantu, dukung saya melalui laman Saweria berikut. 10% dari dukungan Anda akan saya sumbangkan melalui Kitabisa. Terima kasih 🙂
Saya menuliskan ketertarikan kepada “hal-hal keren” di bio Medium, mulai dari “Formula Satu” sampai “Geoscience”. Tapi kalau dipikir-pikir, konten weblog ini belum pernah ada yang berbau F1!
Setelah beberapa tulisan, kali ini saatnya rehat sejenak dari geosains, lalu menulis tentang F1. Sure, it’s time for some F1 analytics!
Ahh, F1. The top of motorsport. Kasta teratas balap mobil dunia. Ajang di mana pahlawan lahir, dan — sayangnya — terkadang meregang nyawa. Tempat di mana teknologi leading edge diuji. Remaja tanggung yang ingin kuliah engineering, kalau bukan karena NASA, ya mungkin karena F1 ini…
Saya pernah ‘sih menulis tentang F1 di blog lain bersama teman-teman saya, yang rupanya hanya bertahan selama 1½ musim (not dangerous!). Tapi, di weblog tersebut, kami kebanyakan menuliskan evaluate balapan. Saya belum pernah menulis tentang analytics F1 di weblog tersebut. Jadi, tulisan ini adalah tulisan F1 analytics, dan sports activities analytics pertama saya. Akhirnya kesampaian juga menulis tentang sports activities analytics!
Sejak 2014, F1 menggunakan regulasi mesin turbo hybrid 1.600 cc V6. Oleh karena itu, musim 2014 hingga sekarang dikenal sebagai period turbo hybrid.
Period ini dianggap banyak orang sebagai period yang tidak seru, akibat dominasi satu tim (Mercedes) dan satu pembalap (the G.O.A.T. Lewis Hamilton). Namun, seperti yang terjadi di beberapa balapan terakhir, period ini tetap mampu menciptakan balapan-balapan trendy basic.
Nah, dari kondisi itu, timbullah pertanyaan:
Hal apa yang membuat balapan di period turbo hybrid dianggap seru, dan berpotensi menjadi trendy basic baru?
Dari pertanyaan di atas, berarti ada beberapa hal yang harus kita siapkan dalam analisis ini:
- {Data} F1 period turbo hybrid
- Definisi dan daftar balapan yang dianggap “seru”
Bagaimana kita bisa mendapatkan kedua hal tersebut?
{Data} F1
F1 tidak menyediakan {data} terbuka secara resmi. Beberapa {data} yang ada pun, seperti hasil lomba dan catatan waktu, tidak ditampilkan lengkap. Untuk sebuah olahraga yang mengklaim diri sebagai data-driven, hal tersebut sangat disayangkan.
Tetapi bukan web namanya kalau tidak ada orang tanpa nama yang berbaik hati di luar sana. Rupanya ada sebuah web site bernama Ergast yang mengumpulkan hasil-hasil lomba F1 yang tersedia secara publik dalam bentuk database SQL serta API. Saya memilih untuk mengunduh database dump MySQL dari Ergast, kemudian memuatnya sebagai database SQLite di laptop computer saya.
Dalam F1, hujan bisa membolak-balikkan strategi serta hasil balapan, membuat sebuah balapan menjadi jauh lebih seru. Variabel hujan akan menjadi penting ketika kita melakukan analisis.
Sayangnya, tidak ada definisi formal mengenai apakah sebuah balapan dianggap “basah” atau tidak, sehingga database Ergast tidak memiliki pencatatan tentang hal tersebut.
Untungnya, ada seorang anon Reddit yang berbaik hati mengumpulkan daftar tersebut di sini. Tanpa pikir panjang (dan tanpa verifikasi, jangan ditiru ya), daftar lomba basah selama 2014–2019 saya masukkan ke database SQLite.
“Balapan Seru”?
“Seru” adalah hal yang sangat subjektif. Selama mesin Honda meraih podium, mungkin balapan tersebut menjadi seru buat saya. Selama Hamilton tidak juara, mungkin balapan tersebut menjadi seru buat Anda.
Kita dapat menggunakan knowledge of the gang untuk membuatnya sedikit lebih objektif. Situs Racefans.net memiliki High 100 Races hasil voting para pembacanya. Pembaca diminta menilai sebuah balapan dari skala 1–10, sehingga tiap balapan memiliki nilai dalam skala tersebut.
Setelah mengingat-ingat balapan-balapan dalam daftar, saya mengumpulkan semua balapan period turbo hybrid, lalu menganggap balapan dengan nilai ≥ 8/10 sebagai balapan yang “seru”. Saya kemudian menjadikan hal tersebut (“is_fun_race
”) sebagai goal biner (antara ya/tidak). Karena hasil voting balapan tahun 2020 masih belum banyak, belum ada balapan 2020 yang tampil dalam High 100, sehingga saya membatasi analisis pada musim 2014–2019.
Dengan kriteria ini, 20.66% dari seluruh balapan selama 2014–2019 adalah balapan yang “seru”. Granularity terkecil dari {data} yang saya analisis adalah satu balapan, seperti terlihat di bawah ini.
Kini saatnya mengolah semua bahan-bahan yang telah kita dapatkan dalam sebuah analisis!
Daftar variabel
Setelah mengamati ketersediaan {data} dan menggunakan pengetahuan saya sebagai followers karbitan (serta keterbatasan waktu tentunya), saya berhipotesis bahwa variabel-variabel berikut mungkin berpengaruh terhadap keseruan balapan (is_fun_race
):
- Apakah balapan digelar dalam kondisi hujan/basah (
is_wet_race
) - Apakah Hamilton mendapatkan podium (
is_hamilton_in_podium
) (LOL) - Latitude/derajat garis lintang dari posisi sirkuit (
lat
): banyak followers berkeyakinan bahwa balapan Eropa lebih seru daripada balapan lainnya - Jumlah hole waktu antar pembalap peraih podium dalam milidetik (
sum_podium_gap_ms
) - Jumlah pembalap yang di-overlap oleh pemenang (
sum_overlapped_by_p1
) - Jumlah pembalap yang tidak finish (
sum_dnf
) - Simpangan baku jumlah pitstop per pembalap (
stdev_pitstop_cnt
): apabila nilainya besar, berarti tiap tim (dan bahkan tiap pembalap) menggunakan strategi pitstop yang berbeda. Bisa juga menandakan bahwa terjadi kekacauan dalam lomba yang menyebabkan perubahan strategi - Minimal overtake yang terjadi (
min_overtake
): Jumlah perubahan posisi semua pembalap antara awal lomba dan akhir lomba. Jumlah overtake yang sebenarnya bisa jadi lebih banyak daripada angka ini. Karena ketidaklengkapan {data} hasil lomba, metric inilah yang paling mungkin menggambarkan jumlah salip menyalip yang terjadi. - Rata-rata usia pembalap podium (
avg_podium_driver_age
) - Jumlah tim non-massive 3 (Mercedes, Ferrari, Red Bull) di podium (
sum_non_big_3_team_in_podium
) - Jumlah pembalap yang tidak begin dari posisi 1–3, namun mencapai podium di akhir lomba (
sum_non_front_row_in_podium
)
Tren 2014–2019
- Hole waktu pada posisi podium memiliki tren menurun. Mengingat podium F1 2014–2019 didominasi oleh tim Huge 3, kemungkinan besar Ferrari dan Red Bull semakin hari semakin dekat dengan Mercedes. Sayangnya, mungkin tidak secepat seperti yang diinginkan para followers ya…
- Walaupun hole waktu di podium menurun, tetapi jumlah overtake memiliki tren menurun juga.
- Usia rata-rata pembalap podium memiliki tren naik (menua). Tetapi, kita melihat pembalap-pembalap muda berbakat meraih podium di 2019. Kalau dilihat dari daftar peraih podium 2019 ‘sih, bisa dibilang kalau ini adalah Verstappen-Leclerc impact…
Cross tabulation untuk variabel kategorikal
Balapan hujan meningkatkan kemungkinan balapan menjadi seru sebanyak hampir 2x lipat (dari 19% ke 36%). Sayangnya, hanya 9% dari semua balapan selama 2014–2019 dapat dikategorikan sebagai balapan basah.
Apabila Hamilton tidak naik podium, kemungkinan balapan menjadi seru meningkat sebesar hampir 4x lipat (dari 15% ke 42%)! Tapi — shock, shock — rupanya Hamilton naik podium di 80% dari semua balapan selama 2014–2019. What a G.O.A.T…
Distribusi variabel kontinu
Variabel tanpa perbedaan nilai median antara balapan seru vs. tidak:
- Derajat lintang dari lokasi sirkuit: kebanyakan balapan diadakan di belahan bumi utara. Sulit menyimpulkan bahwa balapan menjadi seru hanya karena balapan tersebut diadakan di Eropa.
- Usia rata-rata pembalap podium: median usia pembalap podium adalah 30 tahun, baik di balapan seru/tidak. Tetapi, perhatikan bahwa variansi dari usia rata-rata lebih besar dalam balapan yang seru.
- Jumlah tim non-Huge 3 di podium: median 0 baik di balapan seru/tidak. Mercedes, Ferrari, dan Red Bull begitu mendominasi selama 2014–2019
- Jumlah pembalap yang tidak begin dari posisi 1–3, namun mencapai podium di akhir lomba: hal ini adalah hal yang cukup langka
Variabel dengan perbedaan nilai median antara balapan seru vs. tidak:
- Jumlah pembalap yang di-overlap oleh pemenang: balapan seru memiliki jumlah overlap yang lebih sedikit. Menandakan balapan yang ketat
- Jumlah pembalap tidak finish: balapan seru memiliki lebih banyak pembalap yang DNF, mungkin berhubungan dengan situasi yang tidak menentu
- Simpangan baku jumlah pitstop tiap pembalap: balapan seru memiliki simpangan baku pitstop yang tinggi. Menandakan strategi berbeda yang digunakan tim. Dapat juga menandakan situasi tidak menentu
- Jumlah hole waktu antar pembalap peraih podium: balapan seru memiliki hole waktu lebih kecil antara P1-P3. Menandakan balapan yang ketat
- Minimal overtake: balapan seru memiliki overtake yang lebih banyak. Duh!
Oke, lalu bagaimana kita menentukan satu variabel terpenting yang menentukan suatu balapan sebagai balapan yang seru? Banyak jalan menuju Roma, however — for the sake of the argument and the title of this text — please welcome, the OneR algorithm…
Judul tulisan ini (“OneR to rule all of them”) bukan cuma referensi ke karya fiksi fantasi epik dengan setting Center Earth, tetapi juga nama sebuah algoritma {data} mining sederhana yaitu OneR, atau OneRule.
Algoritma ini pertama kali dituliskan oleh Holte (1993), dan saya pertama kali membaca tentangnya dari buku Interpretable Machine Learning karya Christoph Molnar. OneR disinggung dalam buku IML karena kemudahan dalam interpretasinya.
Lalu kenapa pakai OneR dalam kasus ini? Sedikit disclaimer: tidak ada alasan khusus ‘sih, saya memang baru saja membaca tentang OneR, dan penasaran untuk mencobanya dalam dataset ini.
Bagaimana OneR bekerja?
Berikut adalah pseudocode OneR yang saya terjemahkan dari buku IML:
1. Jadikan semua variabel kontinu menjadi discrete (jika perlu)2. Untuk setiap variabel:
a. Buat cross tabulation dengan variabel goal
b. Buat aturan untuk memprediksi goal berdasarkan kelas terbanyak dari cross tabulation di (a.)
c. Hitung error untuk aturan yang dihasilkan tiap variabel3. Pilih variabel dengan error terkecil
Masih bingung? Dalam contoh berikut (dikutip dari saedsayad.com), kita berusaha memprediksi apakah akan bermain golf/tidak berdasarkan prakiraan, suhu, kelembaban, dan angin. Hal pertama yang harus dilakukan adalah membuat cross tabulation antara tiap variabel dengan goal, yang menghasilkan tabulasi-tabulasi di bawah.
Untuk setiap variabel, kita buat aturan berdasarkan kelas yang terbanyak. Misalnya untuk variabel prakiraan cuaca:
- Jika
outlook == 'Sunny'
, makaplay golf == 'Sure'
(karena‘Sure’
adalah kelas terbanyak untuk‘Sunny’
- Jika
outlook == 'Overcast'
, makaplay golf == 'Sure'
- Jika
outlook == 'Wet'
, makaplay golf == 'No'
Lakukan hal yang sama untuk tiap variabel, lalu hitung error untuk tiap set aturan-aturan tersebut. Berarti, di akhir proses, kita akan memiliki 4 set aturan berdasarkan variabel Outlook
, Temp
, Humidity
, dan Windy
.
Langkah terakhir adalah memilih satu variabel yang menghasilkan error paling kecil. Dalam hal ini, rupanya aturan berdasarkan variabel prakiraan cuaca memiliki error yang terkecil untuk memprediksi bermain golf/tidak.
Simpel, `kan?
Hasil
Karena kelengkapannya, saya menggunakan sebuah library yang tersedia di R (von Jouanne-Diedrich, 2017) untuk menjalankan algoritma ini. Saya pun baru tahu kalau kita bisa menggunakan package deal rpy2
serta magic %%R
untuk menjalankan kode R di Jupyter Pocket book.
Dan… algoritma OneR memilih minimal overtake sebagai satu variabel terbaik untuk menentukan apakah balapan F1 period turbo hybrid menjadi seru atau tidak. Apabila minimal overtake > 53 dalam suatu balapan, maka balapan tersebut adalah balapan yang seru. Para followers masih merindukan balapan dengan banyak aksi salip menyalip.
Menariknya, kita mendapatkan usia rata-rata pembalap di podium sebagai variabel yang sama baiknya. Apabila usia rata-rata pembalap podium ≤ 25 dalam suatu balapan, maka balapan tersebut adalah balapan yang seru. Followers tentunya mendambakan darah muda yang baru untuk menapaki tangga podium balapan F1.
FIA (badan motorsport mobil dunia) sudah mengamati kedua tren ini sejak lama, oleh karenanya perubahan regulasi besar di 2021 (yang diundur ke 2022) dibuat supaya mempermudah aksi salip menyalip terjadi.
Selain itu, banyak pembalap muda berbakat yang naik kelas ke F1. Selain taktik pemasaran (F1 pastinya ingin mengambil hati penonton milenial), nama-nama muda yang meraih podium akan terasa sangat menyegarkan untuk seluruh followers F1.
Catatan penting: coba ingat-ingat lagi % balapan yang seru, yaitu hanya 20.66% dari seluruh balapan selama 2014–2019. Artinya, kalau kita menebak bahwa semua balapan tidak seru, maka kita akan mendapatkan akurasi sebesar 79.34%. Ingat: akurasi bukanlah metrik yang baik dalam klasifikasi tak berimbang.
- Klasifikasi dengan aturan berdasarkan minimal overtake (
IF minimum_overtake > 53 THEN is_fun_race == 1
)dapat memprediksi “balapan seru” - Klasifikasi dengan aturan berdasarkan rata-rata usia pembalap podium (
IF avg_podium_driver_age <= 25 THEN is_fun_race == 1
) dapat memprediksi “balapan seru” - Dalam analisis {data}, ketidaklengkapan {data} adalah hal yang lumrah. Melengkapinya dengan sumber-sumber lain yang terverifikasi pun adalah hal yang lumrah
- Dengan segala keterbatasannya, OneR adalah algoritma yang mudah dijelaskan dan bisa digunakan sebagai benchmark, maupun untuk mencari pola dalam {data}
- Akurasi bukanlah metrik yang baik dalam klasifikasi tak berimbang
- Masih banyak variabel yang belum saya eksplor dari Ergast, seperti tabel
lap_time
. Saya pun kurang mengulik hal-hal mengenai papan tengah lomba, padahal di period ini, persaingan papan tengah cukup menegangkan. Andai saya punya lebih banyak waktu… - Saya sangat merekomendasikan buku Interpretable Machine Learning untuk dibaca oleh analyst, karena akan sangat membantu dalam menjelaskan black field mannequin kepada viewers yang awam {data}. Bukunya asyik dan mudah diikuti
Seperti biasa, pocket book Python yang saya gunakan dapat diakses secara bebas di repositori GitHub berikut. Diskusi, kritik, dan saran saya tunggu di kolom komentar. Terima kasih!