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

Введение

Согласно отчету Международного энергетического агентства (МЭА), на жизненный цикл зданий от строительства до сноса приходилось 37% глобальных выбросов CO2, связанных с энергетикой и технологическими процессами, в 2020 году. Тем не менее, можно резко сократить потребление энергии. зданий с помощью сочетания простых в реализации исправлений и современных стратегий.

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

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

(Примечание. Исходная статья была опубликована на веб-сайте Analytics Vidhya. Нажмите здесь, чтобы перейти на веб-страницу)

Содержание:

  1. История проекта
  2. Постановка задачи
  3. Предпосылки
  4. Описание набора данных
  5. Загрузка набора данных
  6. Исследовательский анализ данных
  7. Предварительная обработка данных и проектирование функций
  8. Моделирование и оценка
  9. Объяснимость модели
  10. Развертывание модели в облаке Streamlit

История проекта

В этой статье мы стремимся исследовать и выявить причины энергоемкости типов зданий, расположенных в различных штатах США. Измерение EUI на месте помогает определить энергопотребление зданий, что может дополнительно помочь контролировать уровни энергопотребления и ограничить выбросы CO2 для улучшения состояния окружающей среды в целом. Другими преимуществами сокращения энергопотребления и создания энергоэффективных зданий являются экономия средств, повышение комфорта в помещениях, соблюдение правил и энергетических стандартов, а также повышение стоимости имущества за счет использования энергоэффективных приборов.

Набор данных состоит из характеристик здания (например, площади пола, типа объекта и т. д.), данных о погоде в месте расположения здания (например, среднегодовая температура, годовое общее количество осадков и т. д.), а также энергопотребления здания и заданного год, измеряемый как Интенсивность использования энергии на объекте (EUI на объекте). Каждая строка в данных соответствует одному зданию, наблюдаемому в данный год.

Мы будем использовать различные методы науки о данных, чтобы понять данные и изучить данные, чтобы получить представление об уровнях энергоемкости строк, а затем использовать методы машинного обучения для прогнозирования EUI сайта. Мы также рассмотрим технику объяснимого ИИ (XAI), чтобы понять прогнозы модели машинного обучения. После разработки модели мы развернем модель в облаке Streamlit для прогнозирования в реальном времени и пакетных прогнозов.

Постановка задачи

Вам предоставляется два набора данных: (1) 'train_dataset', в котором представлены наблюдаемые значения EUI сайта для каждой строки, и (2) 'x_test dataset'. наблюдаемые значения EUI сайта для каждой строки удаляются и предоставляются отдельно в y_test. Ваша задача состоит в том, чтобы спрогнозировать EUI сайта для каждой строки (используя полный набор обучающих данных), учитывая характеристики здания и данные о погоде для местоположения здания. Используйте наборы тестов для проверки и тестирования. Целевая переменная — site_eui для задачи предиктивной аналитики.

Показатель оценки: среднеквадратическая ошибка (RMSE)

Предпосылки

Этот проект предназначен для учащихся среднего и продвинутого уровня, которые хотят расширить свои знания об объяснимом ИИ и развертывании моделей машинного обучения. Новички в области науки о данных также могут работать над этим проектом, если они знакомы со следующими инструментами:

  1. Знание языка программирования Python
  2. Базовые инструменты обработки данных, такие как pandas, matplotlib, seaborn и Sci-kit, изучают
  3. Знакомство с методами машинного обучения, такими как регрессия, классификация и т.д.

Описание набора данных

Набор данных взят из WiDS Datathon 2022, который состоит из 100 тысяч наблюдений за зданиями в США за 7 лет. давайте посмотрим на описание набора данных, прежде чем двигаться дальше по рабочему процессу проекта.

Источник набора данных: Нажмите здесь

  • id: идентификатор здания
  • Year_Factor: анонимный год, в котором наблюдались факторы погоды и энергопотребления.
  • State_Factor: анонимное состояние, в котором находится здание
  • building_class: классификация зданий
  • facility_type: тип использования здания
  • floor_area: площадь пола (в квадратных футах) здания.
  • year_built: год постройки здания
  • energy_star_rating: рейтинг энергоэффективности здания.
  • ELEVATION: высота расположения здания
  • january_min_temp: минимальная температура января (по Фаренгейту) в месте расположения здания.
  • january_avg_temp: средняя температура января (по Фаренгейту) в месте расположения здания.
  • january_max_temp: максимальная температура января (по Фаренгейту) в месте расположения здания.
  • cooling_degree_days: градусо-день охлаждения для данного дня — это число градусов, при котором среднесуточная температура превышает 65 градусов по Фаренгейту. Каждый месяц суммируется для получения годового итога по месту нахождения здания.
  • heating_degree_days: градусо-день отопления для данного дня — это число градусов, при котором среднесуточная температура падает ниже 65 градусов по Фаренгейту. Каждый месяц суммируется для получения годового итога по месту нахождения здания.
  • precipitation_inches: годовое количество осадков в дюймах в месте расположения здания.
  • snowfall_inches: годовой снегопад в дюймах в месте расположения здания.
  • snowdepth_inches: годовая высота снежного покрова в дюймах в месте расположения здания.
  • avg_temp: средняя годовая температура в месте расположения здания.
  • days_below_30F: общее количество дней ниже 30 градусов по Фаренгейту в месте расположения здания.
  • days_below_20F: общее количество дней ниже 20 градусов по Фаренгейту в месте расположения здания.
  • days_below_10F: общее количество дней ниже 10 градусов по Фаренгейту в месте расположения здания.
  • days_below_0F: общее количество дней ниже 0 градусов по Фаренгейту в месте расположения здания.
  • days_above_80F: общее количество дней с температурой выше 80 градусов по Фаренгейту в месте расположения здания.
  • days_above_90F: общее количество дней с температурой выше 90 градусов по Фаренгейту в месте расположения здания.
  • days_above_100F: общее количество дней с температурой выше 100 градусов по Фаренгейту в месте расположения здания.
  • days_above_110F: общее количество дней с температурой выше 110 градусов по Фаренгейту в месте расположения здания.
  • direction_max_wind_speed: направление ветра для максимальной скорости ветра в месте расположения здания. Дается в 360-градусном
    направлении по компасу (например, 360 = север, 180 = юг и т. д.).
  • direction_peak_wind_speed: направление ветра для максимальной скорости порыва ветра в месте расположения здания. Дается в 360-градусном направлении по компасу (например, 360 = север, 180 = юг и т. д.).
  • max_wind_speed: максимальная скорость ветра в месте расположения здания
  • days_with_fog: количество дней с туманом в месте расположения здания

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

Загрузка набора данных

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

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

# importing all the python libraries
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns 
from sklearn.impute import KNNImputer
from statsmodels.stats.outliers_influence import variance_inflation_factor

#importing algorithms
from sklearn.model_selection import train_test_split, GridSearchCV
from xgboost import XGBRegressor
import xgboost
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import KFold, cross_val_score
import sklearn
import shap
import optuna
import joblib

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# load the dataset
df = pd.read_csv("/kaggle/input/site-energy-intensity-dataset/train_dataset.csv")
test_df = pd.read_csv("/kaggle/input/site-energy-intensity-dataset/x_test.csv")
df.head()

Наш набор данных поезда содержит около 75 тыс. строк и 64 столбца, а тестовый набор данных содержит 25 тыс. строк наблюдений. мы сохранили набор тестовых данных в переменной test_df в нашем проекте.

Понимание данных

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

# columns with null values
df.isnull().sum()[df.isnull().sum() != 0]

# find the correlation between numerical columns
df.corr().T

Используя функцию corr(), мы находим коэффициенты корреляции числовых столбцов, которые позволяют нам сделать вывод, какие столбцы влияют на целевую переменную.

# descriptive statistics of dataframe
df.describe()

Из-за большого размера вывода я показал только часть вывода кодов для понимания цели. вы можете проверить связанные репозитории github в конце статьи для получения дополнительной информации.

Некоторые наблюдения на этапе понимания данных:

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

Исследовательский анализ данных

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

Тепловая карта кадра данных

# heatmap to visualize multi collinearity in dataset
plt.figure(figsize=(30,20))
sns.set(font_scale=0.8)
sns.heatmap(df.corr(), annot=True, cmap=plt.cm.CMRmap_r)

Используя функцию тепловой карты Seaborn, мы можем визуализировать корреляцию между столбцами. На приведенной выше тепловой карте мы можем увидеть взаимосвязь между различными столбцами и получить представление о сильно коррелированных столбцах, чтобы предпринять дальнейшие действия.

Наблюдения:

  • Набор данных имеет несколько столбцов взаимных корреляций, которые не подходят для задачи регрессии.
  • Столбцы температуры в зимние и летние месяцы коррелируют друг с другом
# create obj_cols list with two object columns from the dataset
obj_cols = ['State_Factor','building_class']

# Using for loop plot the stripplot for both object columns
for col in obj_cols:
    plt.figure(figsize=(5,5))
    sns.stripplot(x=col, y='site_eui', data=df)
    plt.show()

# stripplot of vairous facility types with site_eui
plt.figure(figsize=(13,6))
sns.stripplot(x='facility_type', y='site_eui', data=df)
plt.xticks(rotation=60)
plt.show()

Связи между числовыми столбцами и целью

# create a new dataframe to extract all the columns from the dataset
ndf = df.drop(['id','site_eui'], axis=1)
target = df['site_eui']

col_list = [col for col in ndf.columns if ndf[col].dtype != 'object']

# plot the scatterplot of all numerical columns with target variable
fig, ax = plt.subplots(30,2, figsize=(12,60))
for idx, col in enumerate(col_list):
    sns.scatterplot(x=col, y='site_eui', data=df, ax=ax[idx//2, idx%2])
    ax[idx//2, idx%2].grid(visible=True, linestyle='--', color='#0b1324')
    ax[idx//2, idx%2].set_title(f'{col} ', pad=12)
    
plt.suptitle(f'Relations between columns and target', fontsize=15, fontweight='bold',
            color='#0b1324')
plt.show()

Наблюдения:

  • Столбец «ВЫСОТА» имеет отношение к целевому столбцу.
  • Нет существенной корреляции между зависимыми столбцами и целевым столбцом.
  • Столбцы «Коэффициент года» и «Год постройки» относятся к целевым столбцам, мы их опустим.
  • «days_with_fog» будет заполнен knimputer, а остальные 3 столбца — значением «mode», так как большинство значений равно 1.
  • Заполнение «энергетического звездного рейтинга» с использованием средних значений по отношению к целевой переменной
  • Для категорийных столбцов мы удалим столбец «Тип объекта», чтобы избежать высокой размерности и шума.
  • Мы удалим столбец «Дни с температурой выше 110F».

Предварительная обработка данных и проектирование функций

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

Обработка пропущенных значений

# last 4 columns are having more than 50% of the missing values
(ndf.isnull().sum()[ndf.isnull().sum() != 0]/len(target))*100

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

# remove noisy features
remove_col = ['Year_Factor','facility_type','year_built','days_above_110F']
n_df = ndf.drop(columns=remove_col, axis=1)

# fill the missing values of the columns
n_df['energy_star_rating'] = n_df['energy_star_rating'].fillna(n_df['energy_star_rating'].mean())
n_df['direction_max_wind_speed'] = n_df['direction_max_wind_speed'].fillna(1.0)
n_df['direction_peak_wind_speed'] = n_df['direction_peak_wind_speed'].fillna(1.0)
n_df['max_wind_speed'] = n_df['max_wind_speed'].fillna(1.0)
n_df['days_with_fog'] = n_df['days_with_fog'].fillna(n_df['days_with_fog'].mean())

Используя метод «fillna()», мы можем заполнить пропущенные значения средними значениями каждого столбца. Есть много подходов, которые можно рассмотреть для обработки пропущенных значений в зависимости от типа проблемы.

Обработка мультиколлинеарности

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

# VIF calculations
def get_vif(X):
    X_matrix = np.array(X)
    vif = [variance_inflation_factor(X_matrix, i) for i in range(X_matrix.shape[1])]
    vif_factors =  pd.DataFrame()
    vif_factors['columns'] = X.columns
    vif_factors['VIF'] = vif
    return vif_factors

X = n_df.drop(columns=['State_Factor','building_class'], axis=1)
vif_factors = get_vif(X)

# total 56 columns
vif_factors.info()

# find the columns with large VIF (vif > 4)
cols_with_large_vif = vif_factors[vif_factors.VIF > 4]['columns']
cols_with_large_vif

Согласно книге «Машинное обучение с использованием Python» Динеша Кумара и М. Прадхана, если значения VIF выше 4, то эти столбцы сильно коррелируют друг с другом. В этом случае мы должны удалить эти столбцы перед применением алгоритмов машинного обучения. Теперь мы займемся проектированием признаков, помня о мультиколлинеарности.

Разработка функций

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

# Summetion of seasonal (i.e. winter and summer) columns  to reduce columns and MC
n_df['Avg_min_temp_winter'] = (n_df['january_min_temp'] + n_df['february_min_temp'] + n_df['march_min_temp'] + 
                               n_df['april_min_temp'] + n_df['october_min_temp'] + n_df['november_min_temp'] + n_df['december_min_temp'])/7

n_df['Avg_max_temp_winter'] = (n_df['january_max_temp'] + n_df['february_max_temp'] + n_df['march_max_temp'] + 
                               n_df['april_max_temp'] + n_df['october_max_temp'] + n_df['november_max_temp'] + n_df['december_max_temp'])/7

n_df['Avg_temp_winter'] = (n_df['january_avg_temp'] + n_df['february_avg_temp'] + n_df['march_avg_temp'] + 
                               n_df['april_avg_temp'] + n_df['october_avg_temp'] + n_df['november_avg_temp'] + n_df['december_avg_temp'])/7
n_df['Avg_min_temp_summer'] = (n_df['may_min_temp'] + n_df['june_min_temp'] + n_df['july_min_temp'] + n_df['august_min_temp'] + n_df['september_min_temp'])/5 
n_df['Avg_max_temp_summer'] = (n_df['may_max_temp'] + n_df['june_max_temp'] + n_df['july_max_temp'] + n_df['august_max_temp'] + n_df['september_max_temp'])/5
n_df['Avg_temp_summer'] = (n_df['may_avg_temp'] + n_df['june_avg_temp'] + n_df['july_avg_temp'] + n_df['august_avg_temp'] + n_df['september_avg_temp'])/5 
n_df['Avg_days_below30F'] = (n_df['days_below_30F'] + n_df['days_below_20F'] + n_df['days_below_10F'] + n_df['days_below_0F'])/4

# columns to remove from the datset
months_cols = list(n_df.iloc[:,5:41].columns) + ['days_below_30F','days_below_20F','days_below_10F','days_below_0F','direction_max_wind_speed',
                                                'direction_peak_wind_speed','snowdepth_inches','avg_temp','days_above_90F']
xdf = n_df.drop(columns=months_cols, axis=1)
xdf.info()
# columns to remove from the datset
months_cols = list(n_df.iloc[:,5:41].columns) + ['days_below_30F','days_below_20F','days_below_10F','days_below_0F','direction_max_wind_speed',
                                                'direction_peak_wind_speed','snowdepth_inches','avg_temp','days_above_90F']
xdf = n_df.drop(columns=months_cols, axis=1)
xdf.info()

# final dataframw of 18 features to continue for modeling and evaluation
zdf = xdf.drop(columns=['State_Factor','building_class'], axis=1)

В приведенном выше коде мы выполнили разработку функций с использованием метода агрегации, а затем удалили ненужные столбцы из фрейма данных. наконец, мы сохранили все функции в переменной с именем «zdf», чтобы применить методы моделирования машинного обучения для нашей задачи регрессии.

Моделирование и оценка

В этом разделе мы применим методы регрессионного моделирования, такие как XGBoost и Random Forest, с последующей настройкой гиперпараметров для построения точных регрессионных моделей и прогнозирования EUI сайта для оптимизации энергопотребления здания.

# zdf and target are the final dataset for time being for baseline modelling

X_train, X_val, y_train, y_val = train_test_split(zdf, target, test_size=0.3, random_state=42)
print(X_train.shape, X_val.shape, y_train.shape, y_val.shape)

--------------------------------[output]--------------------------------------
(53029, 18) (22728, 18) (53029,) (22728,)

В приведенном выше коде мы разделяем данные на обучающие и тестовые наборы данных для целей моделирования и оценки. теперь мы напишем функцию моделирования для обучения с использованием алгоритмов XGBoost и Random Forest.

# modelling function for xgb and rf
def modeling(X_train, y_train, X_test, y_test, **kwargs):
    scores = {}
    models = []
    if 'xgb' in kwargs.keys() and kwargs['xgb']:
        xgb = XGBRegressor()
        xgb.fit(X_train._get_numeric_data(), np.ravel(y_train, order='C'))
        y_pred = xgb.predict(X_test._get_numeric_data())
        scores['xgb']= [np.sqrt(mean_squared_error(y_test, y_pred))]
        models.append(xgb)

    if 'rf' in kwargs.keys() and kwargs['rf']:
        rf = RandomForestRegressor(n_estimators=200, max_depth=8)
        rf.fit(X_train, y_train)
        y_pred = rf.predict(X_test)
        scores['rf']= [np.sqrt(mean_squared_error(y_test, y_pred))]
        models.append(rf)
        
    return scores

# call the function using train and val datasets
modeling(X_train, y_train, X_val, y_val, xgb=True, rf=True)

------------------------------[Output]-----------------------------------
{'xgb': [48.27921059144114], 'rf': [49.49613354383458]}

Обучив модель с использованием гиперпараметров по умолчанию, мы получаем показатель RMSE 48,27 в XGB и 49,49 в модели RF. мы будем дополнительно оптимизировать модель, используя методы гиперпараметров.

Настройка гиперпараметров

gkf = KFold(n_splits=3, shuffle=True, random_state=42).split(X=X_train, y=y_train)

# A parameter grid for random forest
params = {
    'n_estimators': range(100, 200, 100),
    'ccp_alpha': [0.0, 0.1],
    'criterion': ['squared_error'],
    'max_depth': [5,6],
    'min_samples_split': [2,3,5],
}

rf_estimator = RandomForestRegressor()

gsearch = GridSearchCV(
    estimator= rf_estimator,
    param_grid= params,
    scoring='neg_mean_squared_error',
    n_jobs=-1,
    cv=gkf,
    verbose=1,
)

rf_model = gsearch.fit(X=X_train, y=y_train)
(gsearch.best_params_, gsearch.best_score_)


--------------------------------[output]-------------------------------------------
Fitting 3 folds for each of 12 candidates, totalling 36 fits
({'ccp_alpha': 0.1,
  'criterion': 'squared_error',
  'max_depth': 6,
  'min_samples_split': 3,
  'n_estimators': 100},
 -2754.1303968681623)

В приведенном выше коде мы использовали метод 'gridsearch' для поиска в сетке параметров и вывода наилучших параметров после подгонки всех различных комбинаций параметров к модели.

Используя метод «поиска по сетке», мы смогли найти наилучшие параметры для модели. В приведенном выше коде мы снова обучили модель, используя оптимальные гиперпараметры, чтобы уменьшить ошибку, и мы видим, что RMSE снизился до 46,51 с предыдущей оценки 48,27, что является разумным улучшением. теперь мы можем сохранить модель, используя joblib для вывода. Мы также рассмотрим объяснимый ИИ, чтобы понять, как модели дают определенный прогноз.

Объяснимость модели

Объяснимость модели машинного обучения в последнее время стала действительно важной областью для объяснения сложных моделей и обеспечения их интерпретируемости. В этом разделе мы будем использовать shap library для объяснения нашей обученной модели XGBoost.

# initialize shap module
shap.initjs()

sample_set = X_val.sample(100)
# shap values
shap_values = shap.TreeExplainer(xgb_estimator).shap_values(sample_set)
ntree_limit is deprecated, use `iteration_range` or model slicing instead.

# plot the summary plot for shaply values
shap.summary_plot(shap_values, sample_set, plot_type="bar")

Приведенный выше код выводит сводную диаграмму, которая сообщает нам, какая функция вносит основной вклад в прогнозирование цели. В нашем случае мы видим, что «energy_star_rating» и «floor_area» вносят наибольший вклад в прогнозирование цели, за которыми следуют функции «snowfall_inches» и «EVEVATION». Точно так же мы можем построить сводный график без полос, чтобы более подробно понять влияние каждой функции.

# summary plot with bar chart
shap.summary_plot(shap_values, sample_set)

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

# plot the decision plot to understand the predictions 
shap.decision_plot(shap.TreeExplainer(xgb_estimator).expected_value[0], 
                   shap_values[50:100], 
                   feature_names=sample_set.columns.tolist()
                  )

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

Развертывание модели в облаке Streamlit

В этом разделе мы рассмотрим Развертывание сохраненной модели в облачной среде с помощью библиотеки Streamlit. Если вы новичок в Streamlit, то я настоятельно рекомендую ознакомиться с моей предыдущей статьей, опубликованной на Analytics Vidhya, в которой было подробное руководство по Streamlit, вы можете прочитать статью, перейдя по ссылке здесь.

Теперь давайте начнем с развертывания приложений Streamlit.

  1. Создайте структуру репозитория проекта, как показано на изображении ниже.

Нам нужно создать структуру репозитория проекта, которая позволит развернуть веб-приложение в облаке Streamlit. В приведенном выше репозитории у нас есть файл app.py, представляющий собой скрипт Python, который будет выполняться в управляемой облачной службе Stremlit. После развертывания и запуска сценария он автоматически сгенерирует веб-URL для доступа к сайту и сделает выводы.

2. войдите в свою учетную запись Streamlit, чтобы отправить репозиторий в облако

Как показано на изображении выше, вы должны назначить репозиторий, в котором лежат файлы вашего проекта, имя ветки и путь к основному файлу (т. е. имя файла python). Наконец, просто нажмите кнопку «Delpoy!», и ваше веб-приложение будет запущено через несколько минут.

Развертывать приложения с помощью Streamlit очень просто, и для получения дополнительной информации о файлах кода проекта вы можете обратиться к репозиторию github — здесь.

Вот несколько скриншотов веб-сайта из развернутого приложения.

Заключение

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

  1. Мы узнали, как работает определение масштаба проекта, и записали описания наборов данных перед началом проекта.
  2. Исследовательский анализ данных для поиска важных идей для подготовки и моделирования данных
  3. Методы разработки признаков, такие как методы агрегации и предварительной обработки данных, такие как обработка пропущенных значений.
  4. Моделирование и оценка машинного обучения для задач регрессии
  5. Объяснимость модели, чтобы сделать модели более объяснимыми и, наконец, развертывание в облаке с использованием инструмента с низким кодом, такого как Streamlit