Ocasión
Hace un par de meses, como parte de la colaboración entre Amazon y la Fórmula 1, los investigadores "que utilizan el poder de las tecnologías en la nube" lanzaron una comparación de la velocidad de los pilotos de todos los tiempos ( enlace ). Naturalmente, el material era publicidad exagerada y logró su objetivo. En todo el mundo de la fórmula durante un par de días, solo se habló con el espíritu de "¿por qué no hay piloto N en la clasificación?" y "¿cómo podría M ser más rápido que K si K lo hizo en la temporada L." Me resultó interesante repetir más o menos esta investigación y, si es posible, prescindir de "todo el poder de las tecnologías en la nube".
Una tarea
. . , , , , , . . AWS – . , . .
F1, – 10% , 90% - . - , .. , , . , , . , , .
. , , «» . , 2 , , « » - , . , . , , , .
. , , . «» , , 1. , , , .
, , kp, .
.. V = V0*kp*kc*Tr, kc – , Tr – , .
, ln(ki)-ln(kj)=ln(tj)-ln(ti) .
. m*(n+1), n – , m – . 1 -1 , , .
AWS, , , - . , , « » - , . .. «» 2 0 .
, F1. . , , , , . , , , - .
, , 2 . 3 . 1 – , . , «». – . , . . – . , , .
, . , 1, 2 3 . , , .
import sys
import re
import urllib.request
def get_wikipedia_page(title, lang='en'):
url = 'https://'+lang+'.wikipedia.org/wiki/'+(title.replace(' ', '_'))
fp = urllib.request.urlopen(url)
mybytes = fp.read()
mystr = mybytes.decode("utf8")
fp.close()
return mystr
title = 'List of Formula One Grands Prix'
try:
print('process: '+title)
th = get_wikipedia_page(title)
r1 = re.findall(r'href="/wiki/[\d][\d][\d][\d]_[\w]*_Grand_Prix"',th)
list_of_GP = list(set(r1))
except:
print("Unexpected error:", sys.exc_info()[0])
titles = list(map(lambda x: x[12: -1].replace('_', ' '), list_of_GP))
for title in titles:
try:
print('process: '+title)
th = get_wikipedia_page(title)
with open('texts/'+title+'.txt', 'w', encoding='utf8') as the_file:
the_file.write(th)
the_file.close()
except:
print("Unexpected error:", sys.exc_info()[0])
html . . ( ), ( ), «» . csv.
DataFrame. , :
+ . ,
+ – , 1 , 2
= + . , . , . - , .
qual_df = pd.read_csv('qual_results.csv')
qual_df['Track_pl_len'] = qual_df['Track'] + '_' +qual_df['Track_len'].apply(str)
qual_df['Car'] = qual_df['Constructor'] + '_' +qual_df['Year'].apply(str)
qual_df['Driver_pl_year'] = qual_df['Driver']+'_'+qual_df['Year'].apply(str)
qual_df_2 = qual_df.copy()
qual_df_2['Driver_pl_year'] = qual_df_2['Driver']+'_'+((qual_df_2['Year'].apply(int)-1)).apply(str)
double_df = pd.concat([qual_df, qual_df_2])
del qual_df2
. , . . , , . , , . .
. 2 , .
, ..
, 2 –
, «» «» - 6 2%. , «» 1 – , . ,
2 One Hot Encoding , x = 1 , y -1
, . , – 1 , .. 1, 0. –
. ln(k) - .
, .
, , «» , .. , F1 Amazon.
, :
,
18 , . , + + , . , 10. , . . , .
– . 2019 , . , 1.
– . . , . , 1 . . 1, / .
, :
N | Driver | Total min |
1 | Ayrton Senna | - 0,435 |
2 | Michael Schumacher | - 0,408 |
3 | Alain Prost | - 0,289 |
4 | Damon Hill | - 0,037 |
5 | Lewis Hamilton | - 0,037 |
6 | Charles Leclerc | 0,016 |
7 | Rubens Barrichello | 0,024 |
8 | Fernando Alonso | 0,067 |
9 | Nico Rosberg | 0,081 |
10 | Nigel Mansell | 0,102 |
11 | Carlos Pace | 0,117 |
12 | Mika Häkkinen | 0,145 |
13 | Max Verstappen | 0,147 |
14 | Valtteri Bottas | 0,153 |
15 | Elio de Angelis | 0,164 |
16 | Daniel Ricciardo | 0,165 |
17 | Jarno Trulli | 0,172 |
18 | Giancarlo Fisichella | 0,184 |
( , .. 1 ):
, .
:
2020 – , ( – 1979 , ).
, Renault , . Racing Point, 2 , Alpha Tauri 2020, Red Bull 2019 Ferrari 2020, - 2018 .
, 2019 Mercedes, 10 , Red Bull . , , , , .
. , . - , . . , .
, ( , .. 2 , 1):
Driver | Car | Time_predicted_sec |
Lewis Hamilton | Mercedes | 77,711 |
Valtteri Bottas | Mercedes | 77,850 |
Max Verstappen | Red Bull Racing-Honda | 78,252 |
Lando Norris | McLaren-Renault | 78,324 |
Sergio Pérez | Racing Point-BWT Mercedes | 78,345 |
Lance Stroll | Racing Point-BWT Mercedes | 78,439 |
Daniel Ricciardo | Renault | 78,451 |
Carlos Sainz Jr. | McLaren-Renault | 78,549 |
Esteban Ocon | Renault | 78,665 |
Alexander Albon | Red Bull Racing-Honda | 78,878 |
Pierre Gasly | AlphaTauri-Honda | 78,985 |
Daniil Kvyat | AlphaTauri-Honda | 79,108 |
Charles Leclerc | Ferrari | 79,116 |
Sebastian Vettel | Ferrari | 79,531 |
Romain Grosjean | Haas-Ferrari | 79,656 |
Kevin Magnussen | Haas-Ferrari | 79,738 |
Kimi Räikkönen | Alfa Romeo Racing-Ferrari | 80,399 |
Antonio Giovinazzi | Alfa Romeo Racing-Ferrari | 80,658 |
1 Amazon . : .
, , , / , , .
, . , , – 70 1. , .
No fue posible construir una regresión decente, un modelo aparentemente libre de problemas todavía arroja resultados inesperados. Todos los intentos de construir un modelo unificado que tenga en cuenta tanto la influencia de la máquina como del piloto han llegado a la necesidad de una estricta regularización.
Adjunto un github al artículo con datos iniciales y tablas dinámicas para el autoestudio, agregaré el código tan pronto como no me avergüence.