www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Прогнозирование функционального состояния насосов в Танзании

Дата публикации Jul 7, 2017

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

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

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

Изображение предоставлено:Пользователь flickr christophercjensen

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

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

Прежде всего, давайте посмотрим на доступные данные.

Значения тренировочного набора- Независимые переменные для тренировочного набора.«https://s3.amazonaws.com/drivendata/data/7/public/4910797b-ee55-40a7-8668-10efd5c1b960.csv»

Учебный набор Ярлыки- Зависимая переменная (status_group) для каждой строки в значениях обучающего набора.«https://s3.amazonaws.com/drivendata/data/7/public/0bf8bc6e-30d0-4c50-956a-603fc693d966.csv»

Импорт данных

training_values = pd.read_csv('https://s3.amazonaws.com/drivendata/data/7/public/4910797b-ee55-40a7-8668-10efd5c1b960.csv', encoding = 'iso-8859-1')training_lables = pd.read_csv('https://s3.amazonaws.com/drivendata/data/7/public/0bf8bc6e-30d0-4c50-956a-603fc693d966.csv', encoding = 'iso-8859-1')

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

list(training_values.columns.values)

У нас есть 40 переменных-предикторов. Из 40 объектов в наборе данных у нас есть 31 категориальная переменная, 7 числовых переменных и 2 переменные даты.

['id', 'amount_tsh', 'date_recorded', 'funder', 'gps_height', 'installer', 'longitude', 'latitude', 'wpt_name', 'num_private',
'basin', 'subvillage', 'region', 'region_code', 'district_code',
'lga', 'ward', 'population', 'public_meeting', 'recorded_by',
'scheme_management', 'scheme_name', 'permit', 'construction_year',
'extraction_type', 'extraction_type_group', 'extraction_type_class',
'management', 'management_group', 'payment', 'payment_type',
'water_quality', 'quality_group', 'quantity', 'quantity_group',
'source', 'source_type', 'source_class', 'waterpoint_type',
'waterpoint_type_group']

Водяные насосы относятся к одной из этих трех категорий.

  1. функциональный,
  2. нефункциональный или
  3. функционально, но нуждается в ремонте.
training_lables.head(5)

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

training_lables.status_group.value_counts()functional                 32259
non functional 22824
functional needs repair 4317
Name: status_group, dtype: int64

По вышеприведенному результату можно сказать, что существует 54,31% функциональных насосов, 38,42% нефункциональных насосов и 7,27% функциональных, но которые необходимо отремонтировать.

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

Удаление объектов с аналогичным представлением данных

Группа функций (извлечение_типа, извлечение_типа_группы, извлечение_типа_класса), (оплата, оплата_типа),
(water_quality, quality_group), (source, source_class), (subvillage, region, region_code, district_code, lga, ward) и (waterpoint_type, waterpoint_type_group) - все содержат одинаковое представление данных в разных зернах. Следовательно, мы рискуем перегрузить наши данные во время обучения, включив в свой анализ все функции, которые можно отбросить.

  • Идентификатор можно удалить, потому что он уникален для каждого экземпляра.
  • num_private составляет ~ 99% нулей

Очистка и анализ данных

Глядя на данные, некоторые особенности, которые казались дискриминационными, основаны на интуиции человека. amount_tsh (количество воды, доступной для точки водоснабжения), gps_height, бассейн, установщик, население, схема_управления, год постройки, extract_type, management_group, water_quality, тип платежа, источник и waterpoint_type, казалось, что они могут быть чрезвычайно важны при определении статуса насоса.

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

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

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

piv_df= training_df[['basin','status_group','status_values']]
piv_table = piv_df.pivot_table(index='basin',
columns='status_group', aggfunc='count')
piv_table
Тепловая карта, построенная с использованием сводной таблицы, созданной на предыдущем шаге

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

['amount_tsh', 'days_since_recorded', 'funder', 'gps_height',
'installer', 'basin', 'subvillage', 'population', 'public_meeting',
'scheme_management', 'scheme_name', 'permit', 'construction_year',
'extraction_type', 'payment_type', 'water_quality',
'quantity_group', 'source_type', 'source_class', 'waterpoint_type',
'waterpoint_type_group']

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

Очень часто выбранная пропорция составляет 70% для тренировочного набора и 30% для теста. Идея состоит в том, что больше обучающих данных - хорошая вещь, потому что это делает модель классификации лучше, в то время как больше тестовых данных делает оценку ошибки более точной.

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(training, test, test_size = 0.3, random_state = 0)                                                                                                                                                                     

Для классификации мы будем использовать методы ансамбля, Ensemble Learning использует несколько моделей машинного обучения, построенных с различными алгоритмами обучения, чтобы повысить точность прогнозирования. Это в основном усредняет прогнозы нескольких моделей, чтобы получить лучший прогноз. Вот некоторые из методов ансамбля, которые я собираюсь использовать в этом анализе: Случайный лес, Дополнительное дерево и Повышение градиента.

Мы попробуем разные методы и выберем наиболее подходящие для наших данных.

Случайный лесной классификатор

rfc = sklearn.ensemble.RandomForestClassifier(n_estimators=1000, 
min_samples_split=6,
criterion='gini',
max_features='auto',
oob_score=True,
random_state=1,
n_jobs=-1)

Древо решений:

dtc = DecisionTreeClassifier(criterion='gini',
max_depth = 10,
max_features = 'auto',
random_state = 1,
splitter = 'best')

Дополнительный классификатор дерева:

ETC = ExtraTreesClassifier(n_estimators=1000, min_samples_split=10)

Повышение градиента:

param_grid = {'learning_rate': [0.075,0.07],
'max_depth': [6,7],
'min_samples_leaf': [7,8],
'max_features': [1.0],
'n_estimators':[100, 200]}gbc = GridSearchCV(estimator=GradientBoostingClassifier(),
param_grid=param_grid,
n_jobs=-1)

Результаты валидации каждого классификатора следующие.

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

Матрица путаницы для классификатора случайных лесов

Матрица путаницы для экстракласса

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

Когда мы выбираем нашу модель, давайте проверим важность каждой функции и посмотрим, какие функции влияют на нашу модель.

['amount_tsh', 'days_since_recorded', 'funder', 'gps_height', 
'installer', 'basin', 'subvillage', 'population', 'public_meeting',
'scheme_management', 'scheme_name', 'permit', 'construction_year',
'extraction_type', 'payment_type', 'water_quality',
'quantity_group', 'source_type', 'source_class', 'waterpoint_type',
'waterpoint_type_group']

Среди всех функций, количество_групп, subvillage и gps_height, похоже, являются наиболее важными. Рассматривая важность функций, мы также можем сделать вывод, что площадь водяного насоса и количество воды, доступной в конкретном случае, будут оказывать большее влияние на функциональное состояние насосов.

Окончательные результаты:

Анализ заставляет нас думать, что набор данных было трудно классифицировать. Приоритетная классификация для определения насосов, которые нуждаются в ремонте. Стоимость стандартного насоса колеблется от 100 до 2000 долларов. Установка этого насоса требует бурения, которое может составлять от 1000 до 3000 долларов. С другой стороны, обслуживание насоса обойдется всего в десятки долларов, что может помочь танзанийскому водному хозяйству в миллионы долларов.

Будущая работа:

  1. Мы могли бы собрать точные данные о населении из внешних источников и добавить их в наш набор данных, а также проверить, влияет ли население в определенных областях на функциональное состояние насоса, что может помочь им в прогнозировании областей и более тщательном изучении этих областей.
  2. Мы можем определить срок службы насоса, используя исторические данные, которые могли бы помочь министерству водного хозяйства Танзании помочь им отремонтировать их до того, как они выйдут из строя.
  3. Чтобы повысить производительность и скорость выполнения прогноза, мы можем использовать метод Extreme Gradient Boosting, в python мы можем обработать его с помощью библиотеки XGBoost.

Расположение проекта:

https://github.com/ksdkalluri/identifying_faulty_pumps

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map