Этот проект преследует 3 основные цели:

  1. Чтобы пролить свет на факторы, определяющие олимпийский успех
  2. Проверить справедливость распространенных утверждений об олимпийских успехах.
  3. Создать модель обучения с учителем, которая может достаточно хорошо прогнозировать количество медалей

Введение

Несмотря на беспрецедентные обстоятельства, в которых они проводились, Олимпийские игры в Токио 2020 года (Токио 2020) по-прежнему оставались крупнейшим спортивным зрелищем года, в котором участвовало около 11000 участников, представляющих 206 национальных олимпийских комитетов (включая команду беженцев), которые участвовали в розыгрыше 339 медалей. по 33 видам спорта. Благодаря добавлению пяти новых видов спорта - софтболу (впервые после Олимпийских игр 2008 года), карате, серфингу, скейтбордингу и спортивному скалолазанию, в Токио-2020 также была самая крупная олимпийская программа на сегодняшний день.

Олимпийский дух, « не побеждать, но участвовать » - фраза, популяризированная бароном Пьером де Кубертеном, основателем Олимпийских игр, - часто цитировалась и прославляется как сердце олимпийского идеала с момента создания современных Олимпийских игр в 1896 году. Но в действительности, похоже, общественность больше интересует измеримые достижения - медали, свидетельством которых могут служить огромная огласка вокруг таблиц медалей. Более того, олимпийский успех на уровне страны часто воспринимается как важный источник национальной гордости, и многие спортсмены считают национальную гордость своим главным мотиватором.

Неудивительно, что в Токио-2020 США, Китай и Россия вновь возглавили таблицу лидеров. Если мы посмотрим на таблицы медалей на протяжении всей олимпийской истории, мы можем заметить, что некоторые страны, особенно США, Китай и Россия, добиваются большего успеха, чем другие. На ум могут прийти несколько правдоподобных объяснений, почему это так, например, большая численность населения, экономическая мощь, исторические успехи и т. Д. Возникает вопрос: можем ли мы предсказать олимпийский успех? Кроме того, если да, то каковы определяющие факторы?

Чтобы исследовать обоснованность популярного утверждения о том, что численность населения и экономическая мощь предсказывают олимпийский успех, а также для изучения других, менее часто рассматриваемых факторов, которые могут определять олимпийский успех, я проведу исследовательский анализ данных на прошлых Олимпийских играх и построю модель обучения с учителем, чтобы делать прогнозы количества медалей.

Решение

Обзор данных

Из-за нехватки времени я лично не собирал данные, а вместо этого получил наборы данных по Олимпийским играм из Kaggle и социально-экономические показатели из открытых данных Всемирного банка.

120 лет олимпийской истории: спортсмены и результаты

  • athlete_events.csv - каждая строка соответствует отдельному спортсмену, участвующему в индивидуальном олимпийском виде (221 167 строк, 15 столбцов).
  • noc_regions.csv - состоит из трехбуквенного кода Национального олимпийского комитета, названия страны и примечаний (230 строк, 3 столбца).

Медали Олимпиады-2020 в Токио (93 строки, 6 столбцов)

  • состоит из страны, золота, серебра, бронзы, итога и рейтинга по тоталу.

Олимпиада 2021 года в Токио

  • Athletes.csv - каждая строка соответствует отдельному спортсмену, участвующему в индивидуальном олимпийском виде (11 085 строк, 3 столбца).

Открытые данные Всемирного банка (1960–2020 гг.)

  • измененные данные, которые состоят из ВВП на душу населения, численности населения, населения в возрасте 15–64 лет (% от общей численности населения) (14 030 строк, 4 столбца)

Очистка данных

Я принял решение ограничить масштаб проекта только летними Олимпийскими играми. Вот блок-схема, которая иллюстрирует мой процесс очистки данных:

Это снимок объединенного набора данных и краткое описание того, что представляет каждый столбец:

Год: год проведения Олимпийских игр.

NOC: трехбуквенный код Национального олимпийского комитета.

регион: название страны

Золото / серебро / бронза: количество золотых / серебряных / бронзовых медалей, выигранных в этом году.

Всего: общее количество медалей, завоеванных в этом году.

min_total: наименьшее количество медалей, выигранных за год за всю историю Олимпийских игр.

min_gold: наименьшее количество золотых медалей за год за всю историю Олимпийских игр.

t_pop: общая численность населения.

young_pop: доля населения в возрасте 15–64 лет.

ввп: ВВП на душу населения в текущем году (отсутствующие значения рассчитаны с использованием прошлогоднего ВВП на душу населения).

count_of_athlete: количество спортсменов, участвующих в Играх, из страны в этом году.

host_true: двоичная переменная, указывающая, принимала ли страна Олимпийские игры в данном году. 1, если страна была хостом, 0 в противном случае.

next_host_true: двоичная переменная, указывающая, будет ли страна принимать следующие Олимпийские игры в данном году. 1, если страна была предстоящим хостом, 0 в противном случае.

time_diff: разница во времени со страной пребывания, рассчитанная на основе этого списка часовых поясов (я использовал среднюю разницу во времени для стран, которые охватывают более одного часового пояса)

mus_true: двоичная переменная, указывающая, является ли страна государством-членом Организации исламского сотрудничества (ОИС). 1, если страна мусульманская, 0 в противном случае.

com_true: двоичная переменная, которая определяет, является ли страна бывшим членом Советского Союза или коммунистическим государством (Китай, Куба, Лаос, Северная Корея и Вьетнам). 1, если страна коммунистическая, 0 в противном случае.

total_last_y: общее количество медалей, выигранных в играх прошлого года.

total_last_2: общее количество медалей, выигранных двумя предыдущими играми

gold_last_y: общее количество золотых медалей, выигранных в играх прошлого года.

gold_last_2: общее количество золотых медалей, выигранных двумя предыдущими играми

medal_won: двоичная переменная, показывающая, выигрывала ли страна когда-либо медаль. 1, если страна ранее выиграла медаль, 0 в противном случае.

EDA

Раздел EDA будет стремиться ответить на следующие вопросы:

  • Выигрывают ли более богатые страны больше медалей?
  • Производят ли более крупные страны лучших спортсменов?
  • Дает ли преимущество страны преимущество страны?

Я визуализировал взаимосвязь между ВВП на душу населения и общим количеством медалей с помощью диаграммы рассеяния.

y2020 = whole[(whole.Year==2020)]
#log gdp
y2020['ln_gdp']=np.log(y2020.current_gdp)
#filter out the top-scoring countries 
x=y2020.sort_values('Total',ascending=False).head(20).ln_gdp
y=y2020.sort_values('Total',ascending=False).head(20).Total
fig, ax = plt.subplots(figsize=(15, 10),facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
#plot regression line 
sns.regplot(x=x, y=y, color='#B73832',scatter_kws={'s':0.1},ax=ax)
#annotate data points on scatterplot with country names q=y2020.sort_values('Total',ascending=False).head(20)
n=[x for x in q.region ]
y=[x for x in q.ln_gdp ]
z=[x for x in q.Total ]
for i, txt in enumerate(n):
  ax.annotate(txt, (y[i], z[i]),fontfamily='monospace',  fontweight='light',fontsize=10, color='#B73832')
for s in ['top','right','bottom','left']:
  ax.spines[s].set_visible(False)
#labels
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.set_xlabel("ln(gdp per capita)",fontfamily='monospace',color='gray')
ax.set_ylabel("Total Medals",fontfamily='monospace',color='gray')
ax.text(Xstart+0.4,Yend+0.2, 'Did Wealthier Countries Win More Medals in Tokyo 2020? ', fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')

На диаграмме рассеяния на Рисунке 1 мы можем наблюдать положительную корреляцию между ВВП на душу населения и общим количеством медалей для 20 ведущих стран в таблице медалей Токио-2020. Светло-красная полоса показывает 95% доверительный интервал для условного среднего, что означает, что если мы моделируем случайные выборки из подобранной линейной модели и используем оценки параметров, как если бы они были истинными параметрами, 95% условных средних будут содержаться в этом группа. Лучшие результаты Олимпийских игр можно объяснить увеличением количества свободного времени, поддержкой профессиональных спортсменов, увеличением государственных инвестиций в спортивную инфраструктуру и улучшением подготовки в более богатых странах. Обратите внимание, что США, Россия и Китай, три страны, набравшие наибольшее количество баллов, здесь выпадают, т. Е. Они добились большего успеха по сравнению со странами с аналогичным ВВП на душу населения в Токио-2020. Размер населения, переменная, которую мы рассмотрим далее, может объяснить такое расхождения.

#log t_pop
y2020['ln_pop']=np.log(y2020.t_pop)
#filter out the top-scoring countries
x=y2020.sort_values('Total',ascending=False).head(20).ln_pop
y=y2020.sort_values('Total',ascending=False).head(20).Total
fig, ax = plt.subplots(figsize=(12, 10),facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
#plot regression line 
sns.regplot(x=x, y=y, color='#B73832',scatter_kws={'s':0.1},ax=ax)
#annotate data points on scatterplot with country names q=y2020.sort_values('Total',ascending=False).head(20)
n=[x for x in q.region ]
y=[x for x in q.ln_pop ]
z=[x for x in q.Total ]
for i, txt in enumerate(n):
  ax.annotate(txt, (y[i], z[i]),fontfamily='monospace',    fontweight='light',fontsize=10, color='#B73832')
for s in ['top','right','bottom','left']:
  ax.spines[s].set_visible(False)
#labels
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.set_xlabel("ln(total population)",fontfamily='monospace',color='gray')
ax.set_ylabel("Total Medals",fontfamily='monospace',color='gray')
ax.text(Xstart+0.8,Yend+0.5, 'Do Larger Countries Produce Better Athletes? ', fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')

Если мы считаем, что спортивные способности мирового класса справедливо распределены по всему миру, мы должны ожидать, что более крупные страны выиграют больше медалей, поскольку у них есть больший резерв талантов, из которого можно черпать. Диаграмма рассеяния на Рисунке 2 дает некоторые доказательства того, что мы видим четкую положительную корреляцию между размером популяции и общим количеством медалей. Расширение доверительных интервалов указывает на увеличение неопределенности прогноза по мере увеличения общего количества медалей. Тем не менее, будет справедливо сказать, что страны с большой численностью населения обычно выигрывают больше медалей. С населением в 1,4 миллиарда человек в Китае гораздо выше шансы на то, чтобы вырастить лучших спортсменов. Эти результаты могут объяснить, почему Китай и Россия всегда возглавляют список лидеров на Олимпийских играх.

Мы также можем оценивать результаты на уровне страны, используя другой показатель - численность населения на медаль.

#calculate population per medal
y2020['pop_pm_2020']=y2020.t_pop/y2020.Total
#filter out the top-scoring countries
pm=y2020.sort_values('pop_pm_2020',ascending=True).head(10)
pm=pm.sort_values('pop_pm_2020',ascending=False).head(10).reset_index(drop=True)
pm['pop_per_medal']=pm.pop_pm_2020.apply(lambda x: x/1000)
fig, ax = plt.subplots(figsize=(15, 13),facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
for p1,p2, c in zip(pm['Total'],pm['pop_per_medal'], pm.index):
  plt.hlines(y=c, xmax=0, xmin=p2, color='gray')
  plt.plot(p2, c, "o",markersize=50,color='#B73832')
  ax.annotate(int(p1), xy=(p2,0+c), va = 'center_baseline', ha='center', fontweight='light', fontfamily='monospace',fontsize=15, color='white',rotation=0)
for s in ['top','right','bottom','left']:
  ax.spines[s].set_visible(False)
#labels
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.tick_params(axis=u'both', which=u'both',length=0)
ax.set_xlabel("pop_per_medal",fontfamily='monospace',color='gray')
ax.text(-30,Yend+0.7, 'The Per Capita Medalists in Tokyo 2020', fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')
ax.text(-30,Yend+0.3, 'Number of medals won', fontsize=15,fontweight='bold',fontfamily='sansserif',color='#B73832')
plt.yticks(range(0,10), pm['region'],fontfamily='monospace',fontweight='semibold',fontsize=15)
plt.xlabel('Population(in thousands)',fontfamily='monospace', fontsize=15)
plt.show()

Сан-Марио имеет 3 медали с населением всего 33 938 человек, что делает их страной с самым низким показателем населения на медаль (11 333 населения на медаль). Австралия - единственная страна из топ-10 (по общему количеству медалей), которая также вошла в список 10 лучших медалистов на душу населения.

#calculate population per gold medal
y2020['pop_pg_2020']=y2020.t_pop/y2020.Gold
#filter out the top-scoring countries
pg=y2020.sort_values('pop_pg_2020',ascending=True).head(10)
pg=pg.sort_values('pop_pg_2020',ascending=False).head(10).reset_index(drop=True)
pg['pop_per_gold']=pg.pop_pg_2020.apply(lambda x: x/1000)
fig, ax = plt.subplots(figsize=(15, 13),facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
for p1,p2, c in zip(pg['Gold'],pg['pop_per_gold'], pg.index):
  plt.hlines(y=c, xmax=0, xmin=p2, color='gray')
  plt.plot(p2, c, "o",markersize=50,color='#f0c05a')
  ax.annotate(int(p1), xy=(p2,0+c), va = 'center_baseline', ha='center', fontweight='light', fontfamily='monospace',fontsize=15, color='black',rotation=0)
for s in ['top','right','bottom','left']:
  ax.spines[s].set_visible(False)
#labels
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.tick_params(axis=u'both', which=u'both',length=0)
ax.set_xlabel("pop_per_gold",fontfamily='monospace',color='gray')
ax.text(-30,Yend+0.7, 'The Per Capita Gold Medalists in Tokyo 2020', fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')
ax.text(-30,Yend+0.3, 'Number of gold medals won', fontsize=15,fontweight='bold',fontfamily='sansserif',color='#f0c05a')
plt.yticks(range(0,10), pg['region'],fontfamily='monospace',fontweight='semibold',fontsize=15)
plt.xlabel('Population(in thousands)',fontfamily='monospace', fontsize=15)
plt.show()

Благодаря триатлонистке Флоре Даффи, выигравшей свое первое золото, Бермудские острова фактически возглавили список золотых медалистов на душу населения с населением 64000 (в 2019 году) на медаль. К сожалению, у Всемирного банка не было данных о численности населения Бермудских островов в 2020 году, поэтому страна отсутствует на графике. Опять же, Австралия - единственная страна из первой десятки (по общему количеству медалей), которая также вошла в список десяти лучших золотых медалистов на душу населения.

После корректировки количества медалей с учетом численности населения выступления США, России и Китая могут оказаться не такими впечатляющими, как кажется на первый взгляд.

«Эффект хозяина» - еще один важный фактор, который, как известно, влияет на показатели страны. График леденцов ниже наглядно демонстрирует увеличение общего количества медалей для принимающих стран в течение принимающего года по сравнению с их средним количеством медалей (в годы, не являющиеся хозяевами):

#calculate mean total medals during 'non-host' years
regular_year = whole[whole.host_true==0].groupby('region')[['Total']].mean().reset_index()
#list of the 10 most recent host countries
host_list=['Australia','Brazil','China','Greece','Japan','South Korea','Spain','UK','USA']
#create a new column in the regular_year dataframe to identify rows which belongs to the 10 most recent host countries
regular_year['host_is']=''
for i in range(0,len(regular_year)):
  if regular_year.region[i] in host_list:
  regular_year['host_is'][i]= 'yes'
#create a new column in the main dataframe to identify rows which belongs to the 10 most recent host countries
whole['subset_host'] = ''
for i in range(0,len(whole)):
  if whole.region[i] in host_list:
     whole['subset_host'][i]= 'yes'
#filter out the results of host countries during non-host years
d1 = regular_year[regular_year.host_is=='yes']
#filter out the results of host countries during host years
d2 =whole[whole.host_true==1][['region','Total','Year']][8:]
#merge them into one dataframe
d3=d2.merge(d1, on='region',how='left').sort_values('Year')
d3.rename(columns={'Total_y':'Not Hosting','Total_x':'Hosting'},inplace=True)
d3['region_y']=d3.region +'('+d3.Year.astype(str)+')'
d3=d3[['region_y','Hosting','Not Hosting']].set_index('region_y')

fig, ax = plt.subplots(1,1, figsize=(12,8), facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
d4 = d3.sort_values(by='Hosting', ascending=True)
#plot dashed lines
plt.hlines(y=range(1,len(d4.index)+1), xmin=d4['Not Hosting'], xmax=d4['Hosting'], color='#B73832', alpha=1,zorder=1,linestyle='--')
#plot dots
plt.scatter(d4['Not Hosting'],range(1,len(d4.index)+1), color='#B73832', alpha=1, ec='#B73832',label='Not Hosting',s=50,marker='.')
#plot arrows
plt.scatter(d4['Hosting'],range(1,len(d4.index)+1), color='#B73832', alpha=1 , ec='#B73832', label='Hosting',s=150,marker='>')
#annotate region_y
for i in range(0,9):
  ax.annotate(d4.index[i],xy=((d4[["Not Hosting", "Hosting"]].max(axis=1)[i]+3),i+1),va = 'center', ha='left',fontweight='light', fontfamily='monospace',fontsize=8, color='black',rotation=0)
for s in ['top','left', 'bottom', 'right']:
  ax.spines[s].set_visible(False)
#labels
ax.axes.get_yaxis().set_ticks([])
ax.set_xlabel("Total Medals",fontfamily='monospace',color='gray')
ax.tick_params(axis='both', which='both',left=False, bottom=False,labelbottom=True)
ax.set_yticklabels([])
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.text(Xstart,Yend+1, 'Does Home Advantage Give Countries an Edge?', fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')
ax.text(Xstart,Yend+0.6, 'Change from avg medal count', fontsize=15,fontweight='bold',fontfamily='sansserif',color='#B73832')
plt.show()

Страны-организаторы, как правило, увеличивают среднее количество медалей вдвое. Это могло быть связано с увеличением инвестиций в спортсменов и большей внутренней поддержкой. Однако эффект хозяина оказывает меньшее влияние на показатели США по сравнению с другими странами.

Мало того, что принимающие страны видят рост общего количества медалей, они также, кажется, увозят домой больше золота.

uk = whole[(whole.region == 'UK') & (whole.Year > 1945)]
fig, ax = plt.subplots(1, 1, figsize=(18, 5), facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
#highlights the host years in red
ax.axvspan(1950,1945.5, facecolor='#B73832',alpha=0.7)
ax.axvspan(2014,2009.5, facecolor='#B73832',alpha=0.7)
#plot bars
ax.bar(uk['Year'], uk['Gold'], 1.5 , color='#f0c05a', label=medal, ec='black')
#labels
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.text(Xstart+3,Yend+1, 'Do Host Countries Take Home More Gold?: the United Kingdom',fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')
ax.set_xlim(Xstart+3, Xend)
plt.show()

Великобритания, похоже, сильно выиграла от эффекта хозяина в 2012 году, выиграв наибольшее количество золотых медалей (29) с 1908 года (56, Великобритания также принимала в этом году). Лондон 1948 года стал первыми летними Олимпийскими играми, проведенными после Берлинских игр 1936 года и начала Второй мировой войны. После Второй мировой войны жесткая экономия и нормирование, возможно, уменьшили влияние хозяина на Великобританию в играх 1948 года.

jp = whole[(whole.region == 'Japan') & (whole.Year > 1945)]
fig, ax = plt.subplots(1, 1, figsize=(18, 5), facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
#highlights the host years in red
ax.axvspan(1961.5,1966, facecolor='#B73832',alpha=0.7)
ax.axvspan(2017.5,2022, facecolor='#B73832',alpha=0.7)
#plot bars
ax.bar(jp['Year'], jp['Gold'], 1.5 , color='#f0c05a', label=medal, ec='black')
#labels
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.text(Xstart+3,Yend+1, 'Do Host Countries Take Home More Gold?: Japan',fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')
ax.set_xlim(Xstart+3, Xend)
plt.show()

Более того, Япония выиграла значительно больше золота за годы, которые она принимала. С 27 золотыми и 58 общими медалями Япония заняла третье место в качестве принимающей страны в Токио-2020, но установила новый рекорд по наибольшему количеству золотых и общих медалей, когда-либо выигранных их делегацией в этом процессе.

Мы можем спросить, что движет эффектом хоста? В дополнение к вышеупомянутым причинам (увеличение инвестиций в спортсменов и усиление внутренней поддержки), более низкие квалификационные стандарты для принимающих стран также могут быть ключевым фактором.

#create a new column in the main dataframe to identify rows which belongs to the 10 most recent host countries
whole['subset_host'] = ''
for i in range(0,len(whole)):
  if whole.region[i] in host_list:
     whole['subset_host'][i]= 'yes'
#filter out the results of host countries in the 10 most recent games
subset_host=whole[(whole.subset_host=='yes')&(whole.Year>=1984)].sort_values(['NOC','Year'])
#create year before host column so we can find the athlete count in the previous game
subset_host['y_before_host']=subset_host.host_true.shift(-1)
#athlete counts of host countries in the previous game
v1=subset_host[subset_host.y_before_host==1][['count_of_athlete','region']]
#athlete counts of host countries in the host year
v2=whole[whole.host_true==1][['count_of_athlete','region','Year']]
v2=v2[v2.Year>=1988]
#merge dataframes
v3=v1.merge(v2, on='region',how='left')
v3.rename(columns={'count_of_athlete_x':'count_before','count_of_athlete_y':'count_host_y'},inplace=True)
v3['region_y']=v3.region +'('+v3.Year.astype(str)+')'
v3=v3[['region_y','count_before','count_host_y']].set_index('region_y')
fig, ax = plt.subplots(1,1, figsize=(12,8), facecolor='#F5F5F5')
ax.set_facecolor('#F5F5F5')
d5 = v3.sort_values(by='count_host_y', ascending=True)
#plot dashed lines
plt.hlines(y=range(1,len(d5.index)+1), xmin=d5['count_before'], xmax=d5['count_host_y'], color='#006192', alpha=1,zorder=1,linestyle='--')
#plot dots
plt.scatter(d5['count_before'], range(1,len(d5.index)+1), color='#006192', alpha=1, ec='#006192',label='count_before',s=50,marker='.')
#plot arrows
plt.scatter(d5['count_host_y'], range(1,len(d5.index)+1), color='#006192', alpha=1 , ec='#006192', label='count_host_y',s=150,marker='>')
#annotate region_y
for i in range(0,9):
  ax.annotate(d5.index[i],xy=((d5[["count_before", "count_host_y"]].max(axis=1)[i]+10),i+1),va = 'center', ha='left',fontweight='light', fontfamily='monospace',fontsize=8, color='black',rotation=0)
for s in ['top','left', 'bottom', 'right']:
  ax.spines[s].set_visible(False)
#labels
ax.axes.get_yaxis().set_ticks([])
ax.set_xlabel("Count of Athletes",fontfamily='monospace',color='gray')
ax.tick_params(axis='both', which='both',left=False, bottom=False,labelbottom=True)
ax.set_yticklabels([])
Xstart, Xend = ax.get_xlim()
Ystart, Yend = ax.get_ylim()
ax.text(Xstart,Yend+0.8, 'Host Countries Tend to Send More Athletes to the Games', fontsize=20,fontweight='bold',fontfamily='monospace',color='#323232')
ax.text(Xstart,Yend+0.4, 'Increase in athlete count compared to the previous game', fontsize=15,fontweight='bold',fontfamily='sansserif',color='#006192')
plt.show()

Принимающие страны в среднем отправляют на 86% больше спортсменов, чем в предыдущей игре (в 10 последних играх). Это можно объяснить автоматическим включением принимающей страны в командные виды спорта и более низкими квалификационными стандартами в индивидуальных видах спорта. Например, хозяевам гарантировано хотя бы по одному спортсмену каждого пола в триатлоне. Япония получила дальнейшую пользу от одобрения Международным олимпийским комитетом (МОК) их предложения о введении пяти новых видов спорта. Президент МОК Томас Бах был прав, когда сказал, что включение пяти новых видов спорта добавит наследия Токийских игр. Япония показала исключительно хорошие результаты в этих соревнованиях, выиграв 13 медалей в пяти видах спорта.

Выводы

• Олимпийские показатели положительно коррелируют с ВВП на душу населения и общей численностью населения.

• Несмотря на завоевание большого количества медалей, 5 стран, набравших наибольшее количество очков (США, Китай, Россия, Великобритания и Япония), не занимают высоких позиций по количеству медалей на душу населения.

• Страны отправляют больше спортсменов на игры и выигрывают больше медалей, когда проводят

Прогнозы на медали

Методология

Я использовал данные с 2000 по 2016 год только для моделирования, поскольку на результаты предыдущих Олимпийских игр, вероятно, повлияют социальные и политические изменения в начале 1990-х годов (холодная война, распад Советского Союза и т. Д.). Набор данных разделен на обучающий набор с данными с 2000 по 2012 год и тестовый набор с данными за 2016 год.

Это список независимых переменных, которые использовались при моделировании:

ВВП на душу населения; Численность населения; Доля населения в возрасте 15–64 лет; Хозяин; Предстоящий хозяин; Разница во времени со страной пребывания; Мусульманская страна; Коммунистическая (или бывшая советская) страна; Общее количество (золотых) медалей, выигранных в последней игре; Общее количество (золотых) медалей, выигранных двумя предыдущими играми; Минимальное количество выигранных (золотых) медалей

Я применил несколько регрессионных моделей: линейная регрессия, модель Пуассона (модель на основе подсчета) и отрицательная биномиальная модель (модель на основе подсчета, которая учитывает высокую долю нулей в данных), а также модель бинарной классификации (логистическая регрессия). делать прогнозы о том, выиграет ли страна какие-либо медали. Затем регрессионные модели оценивались с использованием R в квадрате, RMSE и MAE, а также модели логистической регрессии с псевдо-R в квадрате, точности и F1-балла (средневзвешенное значение оценок точности и отзыва).

Регрессия OLS

Медали ~ журнал (ввп на душу населения) + журнал (общая численность населения) +% населения в возрасте от 15 до 64 лет + ведущий + будущий ведущий + разница во времени + мусульманин + коммунист + медали из последней игры + медали за две предыдущие игры + золото медали последней игры + золотые медали двух предыдущих игр + минимальное количество выигранных медалей + минимальное количество выигранных золотых медалей

Логистическая регрессия

Medal_won ~ log (ввп на душу населения) + log (общая численность населения) +% населения в возрасте от 15 до 64 лет + ведущий + будущий ведущий + разница во времени + мусульманин + коммунист + общее количество медалей из последней игры + минимальное количество выигранных медалей

Наконец, я использовал модели регрессии OLS и логистической регрессии, чтобы сделать прогнозы вне выборки для Токио 2020 и сравнить прогнозы с фактическими результатами.

Оценка модели

Модель регрессии OLS объясняет 97% дисперсии результатов медалей в наборе тестов, как показано в таблице 1, что свидетельствует о том, что модель очень хорошо соответствует данным и переобучение не вызывает большого беспокойства. Он также дает самые низкие значения RMSE и MAE; модель в среднем прогнозирует подсчет медалей с ошибкой 5,25.

Вероятная причина, по которой модель Пуассона не работает так же хорошо, как линейная модель, заключается в ее сильно ограничивающем предположении об эквидисперсии, которое требует, чтобы условное среднее значение равнялось условной дисперсии для параметра. Возможно, в будущем стоит выяснить, почему модель отрицательного бинома так плохо подходит для данных.

В модели бинарной классификации я использовал точку отсечения 0,52 и достиг достаточно высокой точности 90% и балла F1 0,9.

Анализ

Из результатов модели регрессии OLS в таблице 2 мы можем видеть, что модель имеет F-значение, которое является статистически значимым на уровне достоверности 95%. Хост (host_true) и будущий хост (host_next_true) на сегодняшний день являются наиболее влиятельными переменными на результаты медалей. Принимающие страны в среднем будут иметь на 29 медалей больше, чем не принимающие страны, а будущие принимающие страны в среднем будут иметь на 9 медалей больше, чем другие страны, если все другие переменные останутся неизменными. Общее количество медалей из последней игры (total_last_y) и минимальное количество выигранных медалей (min_total) также являются сильными предикторами количества медалей.

Коэффициенты для общей численности населения, общего количества медалей в двух предыдущих играх и разницы во времени являются положительными и статистически значимыми, что указывает на положительную корреляцию между этими переменными и количеством медалей. Удивительно, но минимальное количество золота отрицательно коррелирует с количеством медалей, а коэффициент ВВП на душу населения не является статистически значимым.

Результаты

В таблице 3 показано сравнение прогнозов модели на Токио-2020 и фактических результатов.

Если рассматривать только первые 12 стран, MAE увеличивается до 7,08, а RMSE - до 9,08. Модель смогла достаточно точно предсказать количество медалей в США, Великобритании и Южной Корее, но завышала количество медалей в Японии и Франции. Китай, Австралия и Италия также превзошли ожидания.

Ошибки прогноза для Японии и Франции могут быть связаны с сильным эффектом хозяина и предстоящими предположениями об эффекте хозяина соответственно. Хотя количество медалей в Японии увеличилось (с 41 в Рио-2016 до 58 в Токио-2020), это ни в коем случае не так велико, как прогнозирует модель. То же самое можно сказать и о модельном прогнозе по подсчету медалей Франции. Франция также уступила другим будущим хозяевам: в Токио-2020 они выиграли на 9 медалей меньше, чем в предыдущей игре.

Ниже приведены матрицы путаницы для модели бинарной классификации:

Бинарная модель показала высокую точность на тестовых данных, но хуже по результатам 2020 года. Точность прогнозов снизилась до 86% с 90% с оценкой F1 0,88. Модель допустила больше ошибок типа II (ложноотрицательных результатов), чем ошибок типа I (ложных срабатываний).

Ограничения

Пандемия, вероятно, повлияла на показатели страны, но модель не может учесть эти эффекты. Такие экзогенные факторы могут также иметь эффект взаимодействия с хозяином и будущими переменными хозяина на результаты медалей. Кроме того, из-за нехватки времени я обучил данные только на нескольких выбранных моделях. Другие регрессионные модели, такие как модели Пуассона с нулевым раздутием, модели с препятствиями и смешанные модели, на самом деле могут дать лучшие результаты. Еще один серьезный недостаток состоит в том, что я применил только одну модель бинарной классификации. Другие методы, обычно используемые для двоичной классификации, такие как деревья решений, случайные леса, машины опорных векторов (SVM) и пробит-модели, остались неизученными.

Следующие шаги

  • Изучите другие модели, чтобы повысить производительность модели и точность прогнозов
  • Включите переменные для отражения показателей страны по другим спортивным мероприятиям и другую информацию по конкретной стране, которая может улучшить характеристики модели.
  • Выйдите за рамки подсчета медалей и изучите показатели каждой страны и проанализируйте их выявленные сравнительные преимущества (RCA). Тича и Першин (2003) обнаружили, что более богатые страны, как правило, меньше специализируются, а это означает, что они выигрывают медали в самых разных видах спорта »

Вывод

  • Переменная принимающей стороны является надежным предиктором эффективности страны.
  • Эффект хозяина на Играх в Токио-2020 меньше, чем прогнозировалось
  • Сильное предположение о «приближающемся эффекте хозяина» и низкие показатели Франции в 2020 году (падение на 9 медалей) могут объяснить завышенную оценку количества медалей для Франции.

Хотя мы, возможно, сможем дополнительно оптимизировать производительность модели, есть предел, до которого это можно сделать. В спортивных мероприятиях всегда присутствует случайный элемент, поэтому некоторая степень непредсказуемости также останется.

Использованная литература:







Https://www.python-graph-gallery.com/182-vertical-lollipop-plot





Https://rss.onlinelibrary.wiley.com/doi/epdf/10.1111/j.1740-9713.2016.00915.x

Наборы данных:







Https://data.worldbank.org/