# Как создать остаточный график в Python

***

**Остаточный график** — это тип графика, на котором сопоставленные значения отображаются с остаточными значениями для [регрессионной модели .](https://bemind.gitbook.io/neural/instrumenty-ocenki/lineinaya-logisticheskaya-i-regressiya-puassona./polnoe-rukovodstvo-po-lineinoi-regressii-v-python)

Этот тип графика часто используется для оценки того, подходит ли модель линейной регрессии для данного набора данных, и для проверки [гетероскедастичности](https://bemind.gitbook.io/neural/instrumenty-ocenki/lineinaya-logisticheskaya-i-regressiya-puassona./polnoe-rukovodstvo-po-lineinoi-regressii-v-python/ponimanie-geteroskedastichnosti-v-regressionnom-analize) остатков.

В этом руководстве объясняется, как создать остаточный график для модели линейной регрессии в Python.

#### **Пример: остаточный график в Python** <a href="#python" id="python"></a>

В этом примере мы будем использовать набор данных, описывающий атрибуты 10 баскетболистов:

```python
import numpy as np
import pandas as pd

#create dataset
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
 'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
 'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

#view dataset
df

 rating points assists rebounds
0 90 25 5 11
1 85 20 7 8
2 82 14 7 10
3 88 16 8 6
4 94 27 5 6
5 90 20 7 9
6 76 12 6 6
7 75 15 9 10
8 87 14 9 10
9 86 19 5 7
```

#### **Остаточный график для простой линейной регрессии** <a href="#undefined" id="undefined"></a>

Предположим, мы подгоняем простую модель линейной регрессии, используя *баллы* в качестве переменной-предиктора и *рейтинг* в качестве переменной-ответа:

```python
#import necessary libraries 
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols

#fit simple linear regression model
model = ols('rating ~ points', data=df). fit ()

#view model summary
print(model.summary())
```

Мы можем создать график невязок по сравнению с подобранным, используя [функцию plot\_regress\_exog()](https://www.statsmodels.org/stable/generated/statsmodels.graphics.regressionplots.plot_regress_exog.html?ref=codecamp.ru) из библиотеки statsmodels:

```python
#define figure size
fig = plt.figure(figsize=(12,8))

#produce regression plots
fig = sm.graphics.plot_regress_exog(model, 'points', fig=fig)
```

<figure><img src="https://www.codecamp.ru/content/images/2020/07/residplotpython1.png" alt="Остаточный сюжет в Python"><figcaption></figcaption></figure>

Изготовлены четыре участка. Тот, что в верхнем правом углу, - это остаточный график по сравнению с подогнанным. По оси X на этом графике показаны фактические значения *точек* переменной предиктора, а по оси Y показана невязка для этого значения.

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

#### **Остаточные графики для множественной линейной регрессии** <a href="#id-1" id="id-1"></a>

Предположим, вместо этого мы подгоняем модель множественной линейной регрессии, используя *передачи* и *подборы* в качестве переменной-предиктора и *рейтинг* в качестве переменной-ответа:

```python
#fit multiple linear regression model
model = ols('rating ~ assists + rebounds', data=df). fit ()

#view model summary
print(model.summary())
```

Еще раз мы можем создать график невязок и предикторов для каждого из отдельных предикторов, используя [функцию plot\_regress\_exog()](https://www.statsmodels.org/stable/generated/statsmodels.graphics.regressionplots.plot_regress_exog.html?ref=codecamp.ru) из библиотеки statsmodels.

Например, вот как выглядит график остатка и предиктора для вспомогательной переменной *предиктора* :

```python
#create residual vs. predictor plot for 'assists'
fig = plt.figure(figsize=(12,8))
fig = sm.graphics.plot_regress_exog(model, 'assists', fig=fig)
```

<figure><img src="https://www.codecamp.ru/content/images/2020/07/residplotpython2.png" alt="Остаток по сравнению с подогнанным графиком"><figcaption></figcaption></figure>

А вот как выглядит график остатка и предиктора для *подборов* переменной предиктора:

```python
#create residual vs. predictor plot for 'assists'
fig = plt.figure(figsize=(12,8))
fig = sm.graphics.plot_regress_exog(model, 'rebounds', fig=fig)
```

<figure><img src="https://www.codecamp.ru/content/images/2020/07/residplotpython3.png" alt="Остаточный и подогнанный график в Python"><figcaption></figcaption></figure>

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