Прогнозирование ВВП на душу населения с помощью потребления энергии на душу населения на языке Python

RedDeveloper
31.12.2022 18:54
Прогнозирование ВВП на душу населения с помощью потребления энергии на душу населения на языке Python
Photo by David Thielen on Unsplash

Введение

Это один из моих карьерных артефактов для курса Data Science and Machine Learning в BloomTech. Если вы хотите перейти к коду, он находится внизу этой статьи.

Меня интересует связь, если таковая существует, между потреблением энергии на душу населения и ВВП на душу населения. Вот как я настроил этот анализ:

Целевая переменная: ВВП на душу населения

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

Метрика оценки: Значение R²

Это даст нам оценку точности нашей регрессионной модели.

XY-... 7-WZ

Линия, имеющая такую форму:

Y = ВВП на душу населения

X = энергопотребление на душу населения

M = (средний ВВП на душу населения) / (среднее энергопотребление на душу населения)

B = 0

Окончательная базовая линия: y = mx

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

Как я избежал утечки

Я импортировал функцию `model_selection.train_test_split` из библиотеки `sklearn`, чтобы разделить данные на обучающий и тестовый наборы. Функция 'train_test_split' предотвращает утечку данных благодаря полному разделению между обучающим и тестовым наборами, а также между независимыми и зависимыми переменными в каждом наборе.

Результаты

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

Код

Хранилище можно найти здесь

.
# Import libraries
import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np
from math import sqrt
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error as mse
from sklearn.model_selection import train_test_split
from statsmodels.formula.api import ols
from scipy.stats import pearsonr
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

# Load data
# Make sure 'World_Energy_Consumption.csv' is in the directory
df = pd.read_csv('World_Energy_Consumption.csv')
columns = [
    'population',
    'gdp',
    'energy_per_capita',
    'energy_per_gdp'
]

# Feature Engineering / Data Wrangling
df = df[columns].dropna()
df['gdp_per_capita'] = df['gdp'] / df['population']
# Remove outliers
gdp_top = df['gdp_per_capita'].quantile(0.95)
gdp_bottom = df['gdp_per_capita'].quantile(0.05)
energy_top = df['energy_per_capita'].quantile(0.95)
energy_bottom = df['energy_per_capita'].quantile(0.05)
df = df[(gdp_bottom < df['gdp_per_capita']) & (df['gdp_per_capita'] < gdp_top)]
df = df[(energy_bottom < df['energy_per_capita']) & (df['energy_per_capita'] < energy_top)]
# Average GDP per capita divided by average energy use per capita
baseline = np.average(df['gdp_per_capita'])
baseline /= np.average(df['energy_per_capita'])
df['baseline'] = range(df.shape[0]) * baseline

# Make independent (X) and dependent (y) variables
X = np.array(df['energy_per_capita'])[:, np.newaxis]
y = df['gdp_per_capita']

# Split data into training and testing sets.
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=123)
# print(X_train.shape)

# Set up Linear Regression
model = LinearRegression()
model.fit(X=X_train, y=y_train)
slope = model.coef_
intercept = model.intercept_
print(f'Predicted GDP per capita = (Energy use per capita)*{slope} + {intercept}')

# Predict GDP per capita
y_pred = model.predict(X_test)
print(f'      LR r^2 = {r2_score(y_test, y_pred)}')
baseline_predict = [baseline*x for x in y_pred]
print(f'baseline r^2 = {r2_score(baseline_predict, y_pred)}')
print(f'        rmse = {sqrt(mse(y_test, y_pred))}')

# Data Visualization
sns.regplot(x=X_train, y=y_train, line_kws = {"color": "red"})
energy_range = range(int(max(df['energy_per_capita'])))
sns.lineplot(
    x=energy_range,
    y=[int(baseline*i) for i in energy_range],
    color='black'
)
plt.xlabel('Energy use per capita')
plt.ylabel('GDP per capita')
black_patch = Patch(color='black', label='baseline')
red_patch = Patch(color='red', label='regression')
plt.legend(handles=[black_patch, red_patch], loc=(0.02, 0.8))
plt.show()
[JS за 1 час] - 9. Асинхронный
[JS за 1 час] - 9. Асинхронный

06.02.2023 13:41

JavaScript является однопоточным, то есть он может обрабатывать только одну задачу за раз. Для обработки длительных задач, таких как сетевые запросы, ввод/вывод файлов или анимация, JavaScript использует асинхронную модель программирования.

Топ-10 компаний-разработчиков PHP
Топ-10 компаний-разработчиков PHP

06.02.2023 12:02

Если вы ищете надежных разработчиков PHP рядом с вами, вот список лучших компаний по разработке PHP.

Скраппинг поиска Apple App Store с помощью Python
Скраппинг поиска Apple App Store с помощью Python

05.02.2023 12:54

📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что результаты поиска на Mac полностью отличаются от результатов на PC. На скриншотах ниже показана разница:

Редкие достижения на Github ✨
Редкие достижения на Github ✨

05.02.2023 12:13

Редкая коллекция доступна в профиле на GitHub ✨

Подъем в javascript
Подъем в javascript

04.02.2023 13:59

Hoisting - это поведение в JavaScript, при котором переменные и объявления функций автоматически "перемещаются" в верхнюю часть соответствующих областей. Это означает, что независимо от того, где они объявлены в вашем коде, они будут обрабатываться так, как если бы они были объявлены в верхней части...

Улучшение генерации файлов Angular
Улучшение генерации файлов Angular

04.02.2023 12:52

Angular - это фреймворк. Вы можете создать практически любое приложение без использования сторонних библиотек.