Регресия

В статистическото моделиране регресионният анализ е набор от статистически процеси за оценка на връзките между зависима променлива (често наричана променлива „резултат“ или „отговор“, или „етикет“ на езика на машинното обучение) и една или повече независими променливи ( често наричани „предиктори“, „ковариати“, „обяснителни променливи“ или „характеристики“). Най-често срещаната форма на регресионен анализ е линейната регресия, при която се намира линията (или по-сложна линейна комбинация), която най-точно отговаря на данните според конкретен математически критерий. Ако не знаете, днес ще ви разкажа подробно за регресията, един от най-важните видове анализ на данни, и как работи регресионният анализ.

Какво прави регресията?

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

Линейна регресия

Линейната регресия се използва за моделиране на връзката между две променливи и оценка на стойността на отговора чрез използване на линия на най-добро съвпадение.

Формула за регресионен анализ:

Формула Y = MX + b

Y е зависимата променлива на регресионното уравнение. M е наклонът на регресионното уравнение. X е зависимата променлива на регресионното уравнение. b е константата на уравнението.

Ако искаме да го разгледаме на пример. Продажби на рекламни данни (в хиляди единици) за определен продукт, рекламни бюджети (в хиляди долари) за телевизия, радио и медии за вестници

#https://www.kaggle.com/datasets/bumba5341/advertisingcsv
df = pd.read_csv("Advertising.csv" )

df.head()

df.shape

(200, 5)

Нека се опитаме да изчислим рекламните такси, изразходвани за телевизионни реклами въз основа на продажбите на продукти.

X = df[["TV"]]
y = df[["Sales"]]

# Model

reg_model = LinearRegression().fit(X, y)

# constant (b - bias)
b = reg_model.intercept_[0]

# coefficient of TV (M)
M = reg_model.coef_[0][0]

print("Linear regression parameters at : b = {0}, M = {1}".format(b, M))

Параметри на линейна регресия при: b = 7,032593549127695, M = 0,04753664043301975

Прогноза

Най-честата употреба на регресионния анализ е за прогнозиране на бъдещи възможности и заплахи. За този пример, нека изчислим какви биха били продажбите, ако имаше 150 единици разходи за телевизионни реклами.

reg_model.intercept_[0] + reg_model.coef_[0][0] * 150

14.163089614080658

# Functional:
new_data = [150]

new_data = pd.DataFrame(new_data,columns=['TV'])


reg_model.predict(new_data)

масив([[14.16308961]])

Визуализация на модела

# Visualization of the Model
g = sns.regplot(x=X, y=y, scatter_kws={'color': 'b', 's': 9},
                ci=False, color="r")
g.set_title(f"Model Equation: Sales = {round(reg_model.intercept_[0], 2)} + TV*{round(reg_model.coef_[0][0], 2)}")
g.set_ylabel("Sales")
g.set_xlabel("TV")
plt.xlim(-10, 310)
plt.ylim(bottom=0)
plt.show()

Оценяване на успеха на прогнозата

MSE

В статистиката средната квадратна грешка (MSE) или средно квадратно отклонение (MSD) на оценител (на процедура за оценка на ненаблюдавано количество) измерва средната стойност на квадратите на грешките - т.е. средната квадратна разлика между изчислената стойности и действителната стойност. MSE е функция на риска, съответстваща на очакваната стойност на квадратната загуба на грешка. MSE е мярка за качеството на един оценител. Тъй като се извлича от квадрата на евклидовото разстояние, винаги е положителна стойност, която намалява, когато грешката се доближава до нула.

# MSE
y_pred = reg_model.predict(X)
mean_squared_error(y, y_pred)

10.512652915656757

RMSE

Средноквадратичното отклонение (RMSD) или средноквадратичното отклонение (RMSE) е често използвана мярка за разликите между стойности (стойности на извадка или популация), предвидени от модел или оценител, и наблюдаваните стойности. RMSD представлява корен квадратен от втория примерен момент на разликите между прогнозираните стойности и наблюдаваните стойности или средната квадратична стойност на тези разлики. RMSD винаги е неотрицателно и стойност 0 (почти никога не се постига на практика) би означавала перфектно съответствие с данните.

# RMSE
np.sqrt(mean_squared_error(y, y_pred))

3.2423221486546887

MAE

средната абсолютна грешка (MAE) е средната стойност на абсолютните разлики между действителните стойности и прогнозните стойности

# MAE
mean_absolute_error(y, y_pred)

2.549806038927486

R-квадрат

R-квадрат е мярка за съответствие за линейни регресионни модели. Тази статистика показва процента на дисперсията в зависимата променлива, която независимите променливи обясняват колективно. R-квадрат измерва силата на връзката между вашия модел и зависимата променлива в удобна скала 0–100%.

# R-squared
reg_model.score(X, y)

0.611875050850071

Множествена линейна регресия

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

Нека създадем модел на множествена регресия с всички променливи в набора от рекламни данни.

X = df[['TV','Radio','Newspaper']]
y = df[["Sales"]]

Модел

X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    test_size=0.20, random_state=1)

reg_model = LinearRegression()
reg_model.fit(X_train, y_train)

# constant (b - bias)
reg_model.intercept_

# coefficients (w - weights)
reg_model.coef_

масив([[0.0468431 , 0.17854434, 0.00258619]])

Прогноза

Каква е очакваната стойност на продажбата въз основа на следните стойности на наблюдение?

TV: 30

радио: 10

вестник: 40

### Prediction
new_data = [[30], [10], [40]]

new_data = pd.DataFrame(new_data).T
new_data.columns =['TV', 'Radio', 'Newspaper']

reg_model.predict(new_data)

масив([[6.202131]])

Оценяване на успеха на прогнозата

# Train RMSE
y_pred = reg_model.predict(X_train)
np.sqrt(mean_squared_error(y_train, y_pred))

1.736902590147092

# TRAIN Rsquared
reg_model.score(X_train, y_train)

0.8959372632325174

# Test RMSE
y_pred = reg_model.predict(X_test)
np.sqrt(mean_squared_error(y_test, y_pred))

1.4113417558581587

# Test RKARE
reg_model.score(X_test, y_test)

0.8927605914615384

CV (кръстосано валидиране)

Изучаването на параметрите на функция за прогнозиране и тестването й върху едни и същи данни е методологична грешка: модел, който просто би повторил етикетите на пробите, които току-що е видял, ще има перфектен резултат, но няма да успее да предскаже нищо полезно за все още- невиждани данни. Тази ситуация се нарича претоварване. За да го избегнете, обичайна практика е при извършване на (контролиран) експеримент с машинно обучение част от наличните данни да се съхраняват като набор от тестове X_test, y_test. Имайте предвид, че думата „експеримент“ не е предназначена да обозначава само академична употреба, защото дори в комерсиални настройки машинното обучение обикновено започва експериментално. Ето блок-схема на типичен работен процес за кръстосано валидиране в обучението по модели. Най-добрите параметри могат да бъдат определени чрез техники за търсене в мрежата.

# 10-Fold CV RMSE
np.mean(np.sqrt(-cross_val_score(reg_model, 
                                  X, 
                                  y, 
                                  cv=10, 
                                  scoring="neg_mean_squared_error")))
  1. 6913531708051797

Какво да вземете предвид при регресионния анализ?

Извънредни стойности

Извънредните стойности се определят като необичайни стойности, които не отговарят на нормалното разпределение в набор от данни и имат потенциала значително да изкривят всеки регресионен модел. Следователно отклоненията трябва да се обработват внимателно, за да се получат точни прозрения от данните. Обикновено данните, събрани от реалния свят, се състоят от различни наблюдения на различни характеристики и много от стойностите може да са неправилно поставени. Каквато и да е причината за отклоненията, наличието на отклонения се отразява негативно на резултата от анализа.

#Function that sets upper and lower limits for outliers.
def outlier_thresholds(dataframe, col_name, q1=0.25, q3=0.75):
    quartile1 = dataframe[col_name].quantile(q1)
    quartile3 = dataframe[col_name].quantile(q3)
    interquantile_range = quartile3 - quartile1
    up_limit = quartile3 + 1.5 * interquantile_range
    low_limit = quartile1 - 1.5 * interquantile_range
    return low_limit, up_limit
# Function that recompiles outliers
def replace_with_thresholds(dataframe, variable):
    low_limit, up_limit = outlier_thresholds(dataframe, variable)
    dataframe.loc[(dataframe[variable] < low_limit), variable] = low_limit
    dataframe.loc[(dataframe[variable] > up_limit), variable] = up_limit
# Are there any outliers? func prepared to answer the question. It outputs true or folse.
def check_outlier(dataframe, col_name):
    low_limit, up_limit = outlier_thresholds(dataframe, col_name)
    if dataframe[(dataframe[col_name] > up_limit) | (dataframe[col_name] < low_limit)].any(axis=None):
        return True
    else:
        return False
# To access indexes of outliers, index= true must be set
def grab_outliers(dataframe, col_name, index=False):
    low, up = outlier_thresholds(dataframe, col_name)

    if dataframe[((dataframe[col_name] < low) | (dataframe[col_name] > up))].shape[0] > 10:
        print(dataframe[((dataframe[col_name] < low) | (dataframe[col_name] > up))].head())
    else:
        print(dataframe[((dataframe[col_name] < low) | (dataframe[col_name] > up))])

    if index:
        outlier_index = dataframe[((dataframe[col_name] < low) | (dataframe[col_name] > up))].index
        return outlier_index

Нека намерим отклонения

grab_outliers(df, 'Newspaper', index=False)
      Unnamed: 0     TV  Radio  Newspaper  Sales
16           17   67.8   36.6      114.0   12.5
101         102  296.4   36.3      100.9   23.8

Нека потиснем отклоненията.

replace_with_thresholds(df, 'Newspaper')

Нека отново проверим отклоненията

grab_outliers(df, 'Newspaper', index=False)
Empty DataFrame
Columns: [Unnamed: 0, TV, Radio, Newspaper, Sales]
Index: []

Мултиколинеарност

Мултиколинеарност възниква, когато две или повече независими променливи са силно корелирани в регресионен модел. Това означава, че в регресионен модел една независима променлива може да бъде предвидена от друга независима променлива.

f,ax = plt.subplots(figsize=(18, 18))
sns.heatmap(df.corr(), annot=True, linewidths=.5,cmap='RdBu', fmt= '.1f',ax=ax, vmin=-1)
plt.show()

Няма мултиколинеарност за този пример.

Хетероскедастичност

В статистиката хетероскедастичността (или хетероскедастичността) се случва, когато стандартните грешки на променлива, наблюдавана за определен период от време, не са постоянни. Когато наблюдавате графиката на остатъците, формата на ветрило или конус показва наличието на различна дисперсия. В статистиката вариращата дисперсия се разглежда като проблем, тъй като регресиите, включващи обикновени най-малки квадрати (OLS), предполагат, че остатъците са извлечени от популация с постоянна дисперсия. Хетероскедастичността е нарушение на предположенията за моделиране на линейна регресия и така може да повлияе на валидността на регресията

g = sns.regplot(x=X['TV'], y=y, scatter_kws={'color': 'b', 's': 9},
                ci=False, color="r")
g.set_title(f"Model Equation: Sales = {round(reg_model.intercept_[0], 2)} + TV*{round(reg_model.coef_[0][0], 2)}")
g.set_ylabel("Sales")
g.set_xlabel("TV")
plt.xlim(-10, 310)
plt.ylim(bottom=0)
plt.show()

Хетероскедастичността за този пример се вижда на фигурата.

Underfit и Overfit

Когато използваме ненужни обяснителни променливи, това може да доведе до пренастройване. Пренастройването означава, че нашият алгоритъм работи добре на набора за обучение, но не превъзхожда тестовите комплекти. Известен е също като проблем с висока дисперсия.

Нашият алгоритъм работи толкова зле, че ако дори не отговаря точно на обучителен набор, тогава се казва, че няма данни. Известен е още като проблем с дезадаптацията.

Видове регресия

Линейна регресия

Има два вида линеен регресионен анализ: проста регресия и множествена линейна регресия

Постепенна линейна регресия

Този тип регресионен анализ е полезен, когато работите с множество независими променливи. При поетапната регресия се използват три метода.

Полиномиална регресия

Това е вид регресионен анализ, който моделира връзката на стойностите на зависимата променлива „x“ и независимата променлива „y“ нелинейно. Въпреки че отговаря на нелинеен модел на данните, това е специален случай на множествена линейна регресия.

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

Логистичен регресионен анализ за извършване на класификация и присвояване Това е полезен регресионен метод. Нормално разпределение Предположението за непрекъснатост няма предпоставка. Променлива на очаквания отговор според обяснителните променливи. Това е регресионен метод, чиито стойности се получават като вероятности.

Ридж регресия

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

Регресия с ласо

Регресията с ласо е вид линейна регресия, която използва свиване. Свиването е мястото, където стойностите на данните се свиват към централна точка, като средната стойност. Процедурата с ласо насърчава прости, редки модели (т.е. модели с по-малко параметри). Този конкретен тип регресия е много подходящ за модели, показващи високи нива на мултиколинеарност или когато искате да автоматизирате определени части от избора на модел, като избор на променлива/елиминиране на параметър.

Акронимът „LASSO“ означава оператор за най-малко абсолютно свиване и избор.

Квантилна регресия

Количествената регресия е иконометрична техника, използвана, когато необходимите условия за използване на линейна регресия не са напълно изпълнени. Това е разширение на линейния регресионен анализ, т.е. може да се използва, когато в данните присъстват извънредни стойности, тъй като неговите прогнози са силни спрямо извънредните стойности в сравнение с линейната регресия.

Еластична нетна регресия

Еластичната нетна регресия се предпочита пред регресията с ръб и ласо, когато трябва да се работи със силно корелирани независими променливи.

Ординална регресия

Поредната регресия се използва за предварително представяне на сортираните стойности. Техниката е полезна, когато зависимата променлива е ординална. Това е специален случай на логистична регресия.

Как да изберем правилния регресионен модел за регресионен анализ?

Регресионният анализ математически описва връзката между набор от независими променливи и зависима променлива. Има много регресионни модели, които можете да използвате. Този избор често зависи от вида на данните, които имате за зависимата променлива, и от вида на модела, който осигурява най-добро съответствие.

Разлики между корелация и регресия

Корелацията и регресията често се бъркат една с друга, тъй като корелацията често може да доведе до регресия. Между тях обаче има важна разлика.

Разликата между тези две статистически мерки е, че корелацията измерва степента на връзка между две променливи (x и y), докато регресията измерва как една променлива влияе на другата.

Регресията определя как x причинява промяна на y и как ще се променят резултатите, ако x и y се променят. При корелация x и y са променливи, които могат да се обменят и да се получи същият резултат. Корелацията е единична статистика или точка от данни, докато регресията е цялото уравнение с всички точки от данни, представени с линия. Докато корелацията показва връзката между две променливи, регресията ни позволява да видим как едната влияе на другата. Данни, представени чрез регресия, когато едното се променя, другото не винаги се променя в същата посока, създавайки причина и следствие. При корелация променливите се движат заедно.

Благодаря за четенето!

Ако искате да прочетете тази статия за kaggle

Можете да намерите тетрадка и набор от данни на Юпитер в моя Github.

Интересувате ли се от Data Science? Нека се свържем на Linkedin.

Следвайте ме за повече наука за данните

Препратки

miuul, https://www.miuul.com/

Регресионен анализ, wikipedia, https://en.wikipedia.org/wiki/Regression_analysisi, 2023 г.

Bulutistan,Regresyon Nedir, Ne İşe Yarar? Regresyon Analizi Nasıl Yapılır?, https://bulutistan.com/blog/regresyon/, 2023 г.

Реджеп Саритекин, Yeni Baslayanlar icin Veri Bilimi Egitimi, Kaggle, https://www.kaggle.com/code/rahmetsaritekin/yeni-baslayanlar-icin-veri-bilimi-egitimi, 2023 г.

Ufuk Çolak,Makine Öğrenmesi — Модел Başarı Değerlendirme Ölçütleri#3, среден, https://ufukcolak.medium.com/makine-%C3%B6%C4%9Frenmesi-model-ba%C5%9Far%C4%B1-de %C4%9Ferlendirme-%C3%B6l%C3%A7%C3%BCtleri-3-26014630d7ce, 2013 г.

Ребека Беванс, Множествена линейна регресия, Scribbr, https://www.scribbr.com/statistics/multiple-linear-regression/#:~:text=What%20is%20multiple%20linear%20regression,variables%20using%20a% 20права%20линия, 2023 г

Джим Фрост, Как да интерпретираме R-квадрат в регресионен анализ, https://statisticsbyjim.com/regression/interpret-r-squared-regression/

Şevket Ay, Model Performansını Değerlendirmek — Metrikler, https://medium.com/deep-learning-turkiye/model-performans%C4%B1n%C4%B1-de%C4%9Ferlendirmek-metrikler-cb6568705b1, 2023 г.

EKOLAR.com, ХЕТЕРОСКЕДАСТИЧНОСТ, https://www.ekolar.com/degisen-varyans-heteroscedasticity/, 2023 г.

investopedia, Определение за хетероскедастичност, https://www.investopedia.com/terms/h/heteroskedasticity.asp, 2023 г.

Buse Köseoğlu, Model Performansını Değerlendirmek, https://medium.com/yaz%C4%B1l%C4%B1m-ve-bili%C5%9Fim-kul%C3%BCb%C3%BC/model-performans%C4% B1n%C4%B1-de%C4%9Ferlendirmek-regresyon-48b4afec8664, 2023 г.

Регресионен анализ, wikipedia, https://en.wikipedia.org/wiki/Regression_analysisi, 2023 Bulutistan,Regresyon Nedir, Ne İşe Yarar? Regresyon Analizi Nasıl Yapılır?, https://bulutistan.com/blog/regresyon/, 2023 г. Recep Saritekin, Yeni Baslayanlar icin Veri Bilimi Egitimi, Kaggle, https://www.kaggle.com/code/rahmetsaritekin/yeni -baslayanlar-icin-veri-bilimi-egitimi,2023 Ufuk Çolak,Makine Öğrenmesi — Модел Başarı Değerlendirme Ölçütleri#3, среден, https://ufukcolak.medium.com/makine-%C3%B6%C4%9Frenmesi- model-ba%C5%9Far%C4%B1-de%C4%9Ferlendirme-%C3%B6l%C3%A7%C3%BCtleri-3-26014630d7ce, 2013 г. Ребека Бевънс, Множествена линейна регресия, Scribbr, https:/ /www.scribbr.com/statistics/multiple-linear-regression/#:~:text=What%20is%20multiple%20linear%20regression,variables%20using%20a%20straight%20line, 2023 Джим Фрост, Как да интерпретираме R -квадрат в регресионен анализ, https://statisticsbyjim.com/regression/interpret-r-squared-regression/ Şevket Ay, Model Performansını Değerlendirmek — Metrikler, https://medium.com/deep-learning-turkiye/ model-performans%C4%B1n%C4%B1-de%C4%9Ferlendirmek-metrikler-cb6568705b1, 2023 EKOLAR.com, HETEROSCEDASTICITY, https://www.ekolar.com/degisen-varyans-heteroscedasticity/, 2023 investopedia, Heteroscedasticity Definition, https://www.investopedia.com/terms/h/heteroskedasticity.asp, 2023 Buse Köseoğlu, Model Performansını Değerlendirmek, https://medium.com/yaz%C4%B1l%C4% B1m-ve-bili%C5%9Fim-kul%C3%BCb%C3%BC/model-performans%C4%B1n%C4%B1-de%C4%9Ferlendirmek-regresyon-48b4afec8664, 2023 г.