/taxi_analis

Primary LanguageJupyter Notebook

taxi_analis

Дан датасет с данными о поездках на такси. Необходимо ответить на ряд вопросов:

  • Как стоимость поездки скоррелирована с другими факторами? Как вы это можете объяснить?
  • Найдите аномальные поездки. Почему именно эти поездки вы считаете аномальными?
  • Постройте распределение по стоимости поездок. Проверьте гипотезу о том, что оно имеет нормальное распределение. Как вы можете это объяснить?
  • Из данных постройте модель, которая описывает тариф (т.е. стоимость поездки от других факторов).
  • Используя модель из пункта выше ответьте на вопрос: были ли в какие-то дни (или временные промежутки) скидки или акции? И если то были, то как вы можете это объяснить.

Корреляция

оставляем числовые переменные, которые могут влиять на стоимость

table = df.iloc[:,[7,8,9,10,11,12,13,15,16,17,18]] 
table.corr()

total_amount имеет наибольшую корреляция со столбцами: trip_distance (расстояние поездки) и fare_amount (тип тарифа)

ту же картину видим и на цветовом графике

plt.figure(figsize=(10,10))
sns.heatmap(table.corr())

логично, что цена поездки зависит от тарифа и расстояния поездки. При этом не важно количество пассажиров или время поездки.


Аномальные поездки

Часть данных имеет отрицательное значение или абсурдно большое

df['total_amount'].min()
df['total_amount'].max()

На бокс плот графиках видны выборосы и отрицательные значения

plt.figure(figsize=(30,4)) # на графике по итоговой цене показаны аномалии по выборосам
sns.boxplot(df['total_amount'])
plt.figure(figsize=(30,4)) # также на графике по дистанции поездки отрицательные значения и несколько выборосов
sns.boxplot(df['trip_distance'])

Распределение

нулевая гипотеза - нормальное распределение

plt.figure(figsize=(30,4))
df['total_amount'].plot.hist(bins = 100, label = 'total_amount')

График распределения: унимодальный, положительный. График похож на логонормальное распределение. Проверяем гипотезу.

stat, p = scipy.stats.shapiro(df['total_amount'])
p < 0.05

гипотеза подтвердилась. мы имеем дело с нормальным распределением.


Модель

X = table[['total_amount']].values
y = table[['fare_amount']].values
slr = lm.LinearRegression()
slr.fit(X, y)
plt.scatter(X, y)
plt.plot(X, slr.predict(X), color='red', linewidth=2)

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