Русский
Русский
English
Статистика
Реклама

Блог компании skillfactory

Перевод Сестра Мэри Кеннет Келлер первая женщина получившая PhD в Computer Science

15.07.2020 12:10:08 | Автор: admin
image


Впервые мы можем механически моделировать процесс познания сестра Мэри Кеннет Келлер.

Сестра Мэри Кеннет Келлер оказала сильное влияние на мир Computer Science в то время, когда нельзя было себе представить женщин в этой области. Ее работа проложила путь тому, что мы сейчас называем информационной экономикой ключевой движущей силе рынка. Она была первой женщиной в США, получившей PhD в области информатики, а затем помогла разработать язык программирования BASIC, который изменил мир информатики.

О ранних годах жизни Келлер Известно немного. Она родилась 17 декабря 1913 года в Кливленде, штат Огайо, в семье Джона Адама Келлера и Кэтрин Джозефин (урожденная Салливан). В 1932 году она последовала Божьему призыву к Сестрам Милосердия Пресвятой Девы Марии в Дубьюке, Айова, а в 1940 году приняла обет с прихожанами. Затем она начала свою академическую карьеру в Чикаго, получив степень бакалавра математики и магистра математики и физики в Университете ДеПоля в 1943 и 1953 годах, соответственно.

image


В 1958 году Келлер начала работать в мастерской Национального научного фонда в центре информатики Дартмутского колледжа, который в то время был мужской школой. Там она работала вместе с Джоном Г. Кемени и Томасом Э. Курцем для разработки языка программирования BASIC.

BASIC произвел революцию в программировании, дав возможность любому, кто мог выучить язык, написать свое собственное программное обеспечение. До BASIC это могли делать только математики и ученые. Разные версии BASIC получили широкое распространение на первых персональных компьютерах в 1970-е и 1980-е годы, позволяя каждому (от владельцев бизнеса до любителей компьютеров) разрабатывать программное обеспечение.

На протяжении всего периода обучения в аспирантуре Келлер была связана с несколькими другими престижными учебными заведениями в дополнение к Дартмутскому университету, в том числе с Мичиганским университетом и Пердью. В 1965 году Келлер получила докторскую степень в области Computer Science в Университете Висконсина в Мэдисоне. Ее диссертация получила название Inductive Inference on Computer Generated Patterns (на языке CDC FORTRAN 63).

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

image


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

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

image


В ее честь Университет Кларка (бывший Колледж Кларка) учредил Стипендию Мэри Кеннет Келлер в области вычислительной техники и основал компьютерный центр Келлер, который оказывает вычислительную и телекоммуникационную поддержку сотрудникам, преподавателям и студентам Университета Кларка. Келлер умерла в возрасте 71 года в Дубьюке, Айова, 10 января 1985 года.



image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Перевод Масштабируемая классификация данных для безопасности и конфиденциальности

23.09.2020 18:06:49 | Автор: admin


Классификация данных на основе контента это открытая задача. Традиционные системы предотвращения потери данных (DLP) решают эту проблему путем снятия отпечатков с соответствующих данных и мониторинга конечных точек для снятия отпечатков. Учитывая большое количество постоянно меняющихся ресурсов данных в Facebook, этот подход не только не масштабируется, но и неэффективен для определения того, где находятся данные. Эта статья посвящена сквозной системе, построенной для обнаружения чувствительных семантических типов в Facebook в масштабе и автоматического обеспечения хранения данных и контроля доступа.

Описанный здесь подход это наша первая сквозная система конфиденциальности, которая пытается решить эту проблему путем включения сигналов данных, машинного обучения и традиционных методов снятия отпечатков для отображения и классификации всех данных в Facebook. Описанная система эксплуатируется в производственной среде, достигая среднего балла F2 0,9+ по различным классам конфиденциальности при обработке большого количества ресурсов данных в десятках хранилищ. Представляем перевод публикации Facebook на ArXiv о масштабируемой классификации данных для обеспечения безопасности и конфиденциальности на основе машинного обучения.

Введение


Сегодня организации собирают и хранят большие объемы данных в различных форматах и местах [1], затем данные потребляются во многих местах, иногда копируются или кэшируются несколько раз, в результате чего ценная и конфиденциальная деловая информация рассеивается по многим корпоративным хранилищам данных. Когда от организации требуется выполнить определенные правовые или нормативные требования, например, соблюдать нормативные акты в ходе гражданского судопроизводства, возникает необходимость сбора данных о местоположении нужных данных. Когда в постановлении о конфиденциальности говорится, что организация должна маскировать все номера социального страхования (SSN) при передаче личной информации неавторизованным субъектам, естественным первым шагом является поиск всех SSN в хранилищах данных всей организации. При таких обстоятельствах классификации данных приобретает решающее значение [1]. Система классификации позволит организациям автоматически обеспечить соблюдение конфиденциальности и политики безопасности, такие как включение политики управления доступом, сохранение данных. Facebook представляет систему, построенную нами в Facebook, которая использует множество сигналов данных, масштабируемую системную архитектуру и машинное обучение для обнаружения чувствительных семантических типов данных.

Обнаружение и классификация данных это их поиск и маркировка таким образом, чтобы при необходимости можно было быстро и эффективно извлекать соответствующую информацию. Нынешний процесс носит скорее ручной характер и заключается в изучении соответствующих законов или нормативных актов, определении того, какие типы информации следует считать чувствительными и каковы различные уровни чувствительности, а затем в соответствующем построении классов и политики классификации [1]. После системы защиты от потери данных (DLP) снимают отпечатки с данных и отслеживают конечные точки вниз по потоку для получения отпечатков. При работе с хранилищем с большим количеством активов и петабайтами данных такой подход просто не масштабируется.

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


Рисунок 1. Потоки онлайн и офлайн-прогнозирования

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

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

Архитектура


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

Устойчивые данные


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

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

Каждое задание это скомпилированный двоичный файл, который выполняет выборку Бернулли по последним данным, доступным для каждого актива. Актив разбивается на отдельные столбцы, где результат классификации каждого столбца обрабатывается независимо. Кроме того, система сканирует любые насыщенные данные внутри столбцов. JSON, массивы, кодированные структуры, URL-адреса, сериализованные данные base 64 и многое другое всё это сканируется. Это может значительно увеличить время выполнения сканирования, так как одна таблица может содержать тысячи вложенных столбцов в большом двоичном объекте json.

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

Для чего нужны признаки?


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

  1. Конфиденциальность прежде всего: самое главное, понятие признаков позволяет нам хранить в памяти только те образцы, которые мы извлекаем. Это гарантирует, что мы храним образцы для единственной цели и никогда не логируем их нашими собственными усилиями. Это особенно важно для неустойчивых данных, поскольку сервис должен поддерживать некоторое состояние классификации, прежде чем предоставлять прогноз.
  2. Память: некоторые сэмплы могут иметь длину в тысячи символов. Хранение таких данных и передача их частям системы без необходимости потребляет много дополнительных байтов. Два фактора могут объединиться с течением времени, учитывая, что существует много ресурсов данных с тысячами столбцов.
  3. Агрегирование признаков: с помощью признаков через их набор четко представляются результаты каждого сканирования, что позволяет системе объединять результаты предыдущих сканирований одного и того же ресурса данных удобным способом. Это может быть полезно для агрегирования результатов сканирования одного ресурса данных в нескольких запусках.

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

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

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

Служба прогнозирования хранит результаты для каждого столбца вместе с метаданными, касающимися времени и состояния сканирования. Любые потребители и нижестоящие процессы, зависящие от этих данных, могут считывать их из ежедневно публикуемого набора данных. Этот набор агрегирует результаты всех этих заданий сканирования, или API реального времени каталога данных. Опубликованные прогнозы фундамент автоматического применения политики конфиденциальности и безопасности.

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

Неустойчивые данные


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

Здесь API принимает два основных аргумента: ключ группировки и необработанные данные, которые должны быть спрогнозированы. Сервис выполняет то же извлечение объектов, что описано выше, и группирует объекты вместе для одного и того же ключа. Эти признаки также поддерживаются в сохраняемом кэше для восстановления после отказа. Каждому ключу группировки служба гарантирует, что перед вызовом сервиса прогнозирования она видела достаточно выборок в соответствии с процессом, описанным выше.

Оптимизация


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

Для чрезвычайно больших таблиц (50 + петабайт), несмотря на все оптимизации и эффективность памяти, система работает над сканированием и вычислением всего, прежде чем закончится память. В конце концов, сканирование полностью вычисляется в памяти и не сохраняется в течение сканирования. Если большие таблицы содержат тысячи столбцов с неструктурированными сгустками данных, задание может завершиться неудачей из-за нехватки ресурсов памяти при выполнении прогнозов для всей таблицы. Это приведет к уменьшению покрытия. Чтобы бороться с этим, мы оптимизировали систему, чтобы использовать скорость сканирования в качестве посредника в том, насколько хорошо система справляется с текущей нагрузкой. Мы используем скорость как прогностический механизм, тчобы видеть проблемы с памятью и при упреждающем расчете карты объектов. При этом мы используем меньше данных, чем обычно.

Сигналы данных


Система классификации хороша настолько, насколько хороши сигналы от данных. Здесь мы рассмотрим все сигналы, используемые системой классификации.

  • На основе содержимого: конечно, первый и важнейший сигнал это содержимое. Выполняется выборка Бернулли по каждому активу данных, который мы сканируем и извлекаем признаки по содержанию данных. Многие признаки происходят из содержимого. Возможно любое количество плавающих объектов, которые представляют рассчеты того, сколько раз был замечен определенный тип образца. Например, у нас могут быть ротзнаки количества электронных писем, увиденных в выборке, или признаки того, сколько смайликов замечено в выборке. Эти расчеты признаков можно нормализовать и агрегировать по различным сканированиям.
  • Происхождения данных: важный сигнал, который может помочь, когда содержимое изменилось из родительской таблицы. Распространенный пример хэшированные данные. Когда данные в дочерней таблице хэшируются, они часто поступают из родительской таблицы, где остаются в открытом виде. Данные о происхождении помогают классифицировать определенные типы данных, когда они не читаются четко или преобразованы из таблицы вверх по потоку.
  • Аннотации: еще один высококачественный сигнал, помогающий в идентификации неструктурированных данных. Фактически аннотации и данные происхождения могут работать вместе для распространения атрибутов между различными активами данных. Аннотации помогают идентифицировать источник неструктурированных данных, в то время как данные о происхождении могут помочь отслеживать поток этих данных по всему хранилищу.
  • Инъекция данных это метод, когда намеренно вводятся специальные, нечитаемые символы в известные источники с известными типами данных. Затем, всякий раз, когда мы сканируем содержимое с одной и той же нечитаемой последовательностью символов, можно сделать вывод, что содержимое исходит из этого известного типа данных. Это еще один качественный сигнал данных, подобный аннотациям. За исключением того, что обнаружение на основе контента помогает обнаружить введенные данные.


Измерение метрик


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

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

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


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

  • Конфигурации платформы логирования: определенные поля в таблицах улья заполняются данными, которые относятся к определенному типу. Использование и распространение этих данных служит надежным источником достоверных данных.
  • Ручная маркировка: разработчики, поддерживающие систему, а также внешние маркировщики обучены маркировать столбцы. Это обычно хорошо работает для всех типов данных в хранилище, и может быть основным источником достоверности для некоторых неструктурированных данных, таких как данные сообщений или пользовательский контент.
  • Столбцы из родительских таблиц могут помечаться или аннотироваться как содержащие определенные данные, и мы можем отслеживать эти данные в нижестоящих таблицах.
  • Выборка потоков выполнения: потоки выполнения в Facebook несут данные определенного типа. Используя наш сканер в качестве сервисной архитектуры, мы можем делать выборку потоков, имеющих известные типы данных, и отправлять их через систему. Система обещает не хранить эти данные.
  • Таблицы выборки: большие таблицы улья, которые, как известно, содержат весь корпус данных, также могут использоваться в качестве обучающих данных и передаваться через сканер как сервис. Это отлично подходит для таблиц с полным диапазоном типов данных, так что выборка столбца случайным образом эквивалентна выборке всего множества этого типа данных.
  • Синтетические данные: мы можем даже использовать библиотеки, которые генерируют данные на лету. Это хорошо работает для простых, общедоступных типов данных, таких как адрес или GPS.
  • Стюарды данных: программы конфиденциальности, как правило, используют стюардов данных для ручного закрепления политик за частями данных. Это служит высокоточным источником достоверности.

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

Непрерывная интеграция


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

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

Так мы сравниваем результаты классификации релиз-кандидата и производственной модели в режиме реального времени.

Пока наборы данных сравнивают признаки RC и PROD, логируется множество вариаций движка классификации ML сервиса прогнозирования. Самая последняя построенная модель машинного обучения, текущая модель в производстве и любые экспериментальные модели. Тот же самый подход позволяет нам разрезать различные версии модели (агностик наших классификаторов правил) и сравнивать метрики в режиме реального времени. Так легко определить, когда эксперимент с ML готов к внедрению в производство.

Каждую ночь RC-признаки, рассчитанные для этого дня, отправляются в обучающий конвейер ML, где модель обучается на последних RC-признаках и оценивает свою производительность в сравнении с достоверным набором данных.

Каждое утро модель завершает обучение и автоматически публикуется в качестве экспериментальной. Она автоматически включается в список экспериментальных.

Некоторые результаты


Маркируется более 100 различных типов данных с высокой точностью. Хорошо структурированные типы, такие как электронные письма и телефонные номера, классифицируются с оценкой f2 более 0,95. Свободные типы данных, такие как пользовательский контент и имя, также работают очень хорошо, с F2-баллами более 0,85.

Ежедневно классифицируется большое количество отдельных столбцов устойчивых и неустойчивых данных во всех хранилищах. Более 500 терабайт сканируются ежедневно в более чем 10 хранилищах данных. Охват большинства из этих хранилищ составляет более 98%.

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


Рис. 2. Диаграмма, описывающая непрерывный поток интеграции, чтобы понимать, как RC-объекты генерируются и отправляются в модель.


Рисунок 3. Высокоуровневая диаграмма компонента машинного обучения.

Компонент системы машинного обучения


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

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

Реализованная модель изучает векторные представления [3] над плотными и разреженными объектами отдельно. Затем они объединяются, чтобы сформировать вектор, который проходит через серию этапов пакетной нормализации [4] и нелинейности для получения конечного результата. Конечный результат число с плавающей точкой между [0-1] для каждой метки, указывающий вероятность того, что пример принадлежит данному типу чувствительности. Использование PyTorch для модели позволило нам двигаться быстрее, дав возможность разработчикам вне команды быстро вносить и тестировать изменения.

При проектировании архитектуры было важно моделировать разреженные (например, текстовые) и плотные (например, числовые) объекты отдельно из-за их внутреннего различия. Для окончательной архитектуры также было важно выполнить развертку параметров, чтобы найти оптимальное значение скорости обучения, размера пакета и других гиперпараметров. Выбор оптимизатора также был важным гиперпараметром. Мы обнаружили, что популярный оптимизатор Adamчасто приводит к переобучению, тогда как модель с SGD стабильнее. Были дополнительные нюансы, которые мы должны были включить непосредственно в модель. Например, статические правила, которые гарантировали, что модель делает детерминированный прогноз, когда признак имеет определенное значение. Эти статические правила определены нашими клиентами. Мы обнаружили, что включение их непосредственно в модель привело к созданию более самодостаточной и надежной архитектуры, в отличие от реализации этапа постобработки для обработки этих специальных граничных случаев. Также обратите внимание, что во время тренировки эти правила отключены, чтобы не мешать тренировочному процессу градиентного спуска.

Проблемы


Одной из проблем был сбор высококачественных достоверных данных. Модель нуждается в достоверности для каждого класса, чтобы она могла изучать ассоциации между объектами и метками. В предыдущем разделе мы обсуждали методы сбора данных как для измерения системы, так и для обучения моделей. Анализ показал, что такие классы данных, как номера кредитных карт и банковских счетов не очень распространены в нашем хранилище. Это затрудняет сбор больших объемов достоверных данных для обучения моделей. Чтобы решить эту проблему, мы разработали процессы получения синтетических достоверных данных для этих классов. Мы генерируем такие данные для чувствительных типов, включая SSN, номера кредитных карт и IBAN-номера, для которых модель не могла прогнозировать ранее. Этот подход позволяет обрабатывать конфиденциальные типы данных без риска конфиденциальности, связанного с укрывательством реальных конфиденциальных данных.

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

Важность признака


Когда в модель вводится новый признак, мы хотим знать его общее влияние на модель. Мы также хотим убедиться, что прогнозы интерпретируемы человеком, чтобы можно было точно понять, какие признаки используются для каждого типа данных. Для этого мы разработали и ввели поклассовую важность признаков для модели PyTorch. Обратите внимание, что это отличается от общей важности признака, которая обычно поддерживается, потому что она не говорит нам, какие признаки важны для определенного класса. Мы измеряем важность объекта, вычисляя увеличение ошибки прогноза после перестановки объекта. Признак является важным, когда перестановка значений увеличивает ошибку модели, поскольку в этом случае модель полагалась на признак в прогнозировании. Признак неважен, когда перетасовка его значений оставляет ошибку модели неизменной, поскольку в этом случае модель игнорировала его [5].

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

Оценка


Важно определить единую метрику успеха. Мы выбрали F2 баланс между отзывом и точностью (смещение отзыва немного больше). Отзыв важнее для случая использования конфиденциальности, чем точность, потому что для команды крайне важно не пропустить никаких конфиденциальных данных (обеспечивая при этом разумную точность). Фактические данные оценки производительности F2 нашей модели выходят за рамки данной статьи. Тем не менее, при тщательной настройке мы можем достичь высокого (0,9+) балла F2 для наиболее важных чувствительных классов.

Связанная работа


Существует множество алгоритмов автоматической классификации неструктурированных документов с использованием различных методов, таких как сопоставление шаблонов, поиск сходства документов и различные методы машинного обучения (байесовские, деревья решений, k-ближайших соседей и многие другие) [6]. Любой из них может использоваться как часть классификации. Однако проблема в масштабируемости. Подход к классификации в этой статье смещен в сторону гибкости и производительности. Это позволяет нам поддерживать новые классы в будущем и поддерживать низкую задержку.

Существует также масса работ по снятию отпечатков с данных. Например, авторы в [7] описали решение, которое фокусируется на проблеме улавливания утечек конфиденциальных данных. Основное предположение заключается в возможности отпечатка с данных, чтобы сопоставить его с набором известных конфиденциальных данных. Авторы в [8] описывают аналогичную проблему утечки конфиденциальности, но их решение основано на конкретной архитектуре Android и классифицируется только в том случае, когда действия пользователя привели к отправке личной информации или если в базовом приложении утечка пользовательских данных. Ситуация здесь несколько отличается, поскольку пользовательские данные также могут быть сильно неструктурированными. Поэтому нам нужна более сложная техника, чем снятие отпечатков.

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

Заключение


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

Есть много направлений будущей работы. Она может включать обеспечение поддержки несхематизированных данных (файлов), классификацию не только типа данных, но и уровня чувствительности, а также использование самоконтролируемого обучения непосредственно во время обучения путем генерации точных синтетических примеров. Которые, в свою очередь помогут модели уменьшить потери на наибольшую величину. Будущая работа может также сосредоточиться на рабочем процессе расследования, где мы выходим за рамки обнаружения и предоставляем анализ первопричин различных нарушений конфиденциальности. Это поможет в таких случаях, как анализ чувствительности (т.е. является ли чувствительность конфиденциальности типа данных высокой (например, IP пользователя) или низкой (например, внутренний IP Facebook)).

Библиография
  1. David Ben-David, Tamar Domany, and Abigail Tarem. Enterprise data classification using semantic web technolo- gies. In Peter F. Patel-Schneider, Yue Pan, Pascal Hitzler, Peter Mika, Lei Zhang, Jeff Z. Pan, Ian Horrocks, and Birte Glimm, editors, The Semantic Web ISWC 2010, pages 6681, Berlin, Heidelberg, 2010. Springer Berlin Heidelberg.
  2. Subramanian Muralidhar, Wyatt Lloyd, Sabyasachi Roy, Cory Hill, Ernest Lin, Weiwen Liu, Satadru Pan, Shiva Shankar, Viswanath Sivakumar, Linpeng Tang, and Sanjeev Kumar. f4: Facebooks warm BLOB storage system. In 11th USENIX Symposium on Operating Systems Design and Implementation (OSDI 14), pages 383398, Broomfield, CO, October 2014. USENIX Association.
  3. Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S Corrado, and Jeff Dean. Distributed representations of words and phrases and their compositionality. In C. J. C. Burges, L. Bottou, M. Welling, Z. Ghahramani, and K. Q. Weinberger, editors, Advances in Neural Information Processing Systems 26, pages 31113119. Curran Associates, Inc., 2013.
  4. Sergey Ioffe and Christian Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. In Francis Bach and David Blei, editors, Proceedings of the 32nd International Conference on Machine Learning, volume 37 of Proceedings of Machine Learning Research, pages 448456, Lille, France, 0709 Jul 2015. PMLR.
  5. Leo Breiman. Random forests. Mach. Learn., 45(1):532, October 2001.
  6. Thair Nu Phyu. Survey of classification techniques in data mining.
  7. X. Shu, D. Yao, and E. Bertino. Privacy-preserving detection of sensitive data exposure. IEEE Transactions on Information Forensics and Security, 10(5):10921103, 2015.
  8. Zhemin Yang, Min Yang, Yuan Zhang, Guofei Gu, Peng Ning, and Xiaoyang Wang. Appintent: Analyzing sensitive data transmission in android for privacy leakage detection. pages 10431054, 11 2013.
  9. Qizhe Xie, Zihang Dai, Eduard H. Hovy, Minh-Thang Luong, and Quoc V. Le. Unsupervised data augmentation.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:



Подробнее..

Перевод Задачки для фронтенд-тренировки doodle-place, Apple Podcasts, Site Blocker, парсинг CSV-файлов

13.07.2020 12:11:27 | Автор: admin

Клон doodle-place


image

doodle-place это онлайн-мир, населенный анимированными каракулями. Вы можете бродить и просматривать каракули, созданные пользователями по всему миру, или внести свой вклад.

Чему вы научитесь, сделав клон doodle-place:

  • Использованию API для Canvas в JavaScript для рисования графики вроде каракулей на экране.
  • Методам работы с 2D-графикой и API WebGL
  • Работе с пользовательским вводом, например, с рисунками, и сохранению результатов в базе данных.

Парсинг CSV-файлов в JSON


Это приложение использует d3-dsv (на стороне клиента) для парсинга CSV-файлов. d3-dsv это утилита, входящая в состав d3 (популярная библиотека визуализации данных), но также может быть использована сама по себе, как показано здесь.

image

Чему вы научитесь, создав парсер из CSV в JSON.

  • Как работать с различными источниками данных (такими как CSV и JSON), и как анализировать наборы данных.
  • Вы обретете практический опыт работы с библиотекой d3-dsv. Вот документация по d3-dsv.

Клон расширения для блокировки сайтов


Site Blocker это веб-расширение, позволяющее блокировать один или несколько сайтов путем добавления доменного имени. Эффективно распоряжайтесь своим временем без отвлекающих факторов.

image

Чему вы научитесь, построив клон Блокировщика сайтов:


Клон Notion


Notion легкое, быстрое и не отвлекающее внимание приложения для ведения заметок и многого другого. Я использую его, чтобы следить за своими задачами и идеями. Что мне нравится в Notion, так это поддержка языка разметки Markdown.

Нет никаких ограничений: вы можете создать настольную версию Notion, а также мобильную или веб-версию. Выберите любимую среду (или ту, которую вы хотите изучить больше всего).

image

Чему вы научитесь, создав клон Notion:

  • Если вы хотите продвинуться, используйте Grid в CSS. Grid фантастически подходит для создания макетов.
  • Работе с базой данных. Вы захотите хранить заметки в базе данных, к которой потом сможете делать запросы.
  • DevOps. Как только вы закончите, разворачивайте приложение в сети или магазине приложений. Покажите миру, что вы сделали.

Клон Подкастов от Apple


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

image

Чему вы научитесь, создав клон Подкастов:

  • Как получать данные из API. В случае данного приложения, данные представлены подкастами. Используйте этот API для получения всех подкастов.
  • Как разработать настольное приложения для Mac OS или приложение для iOS и развернуть его в магазине приложений. Если вам нравится собирать для веба, это тоже отлично!
  • Построению нативных интерфейсов. Например, вы узнаете как выводить данные на экран.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Полезное


Подробнее..

Перевод Надоел JavaScript используй браузерный Python

15.07.2020 20:18:51 | Автор: admin
Мой опыт разработки игры Змейка на Brython

image

Погоди, что? думаю, большинство читателей отреагирует на заголовок именно так.

В смысле просто использовать Python в браузере?

Все знают, что в браузерах работает только JavaScript.

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

Да, это Python!

А теперь, давайте поговорим о том, как и насколько хорошо это работает, а также обсудим ряд других альтернатив JavaScript.

Знакомство с Brython


Brython это реализация Python3, написанная на JavaScript, которая позволяет писать код на Python для веба.

По сути, это JavaScript-библиотека, которая преобразует ваш код на Python в эквивалентный JS и исполняет его в рантайме.

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

Разработка Змейки на Brython


image

Вот ссылка на мой сайт, где вы можете попробовать версии Змейки на JavaScript и Brython. А вот ссылка на GitHub c исходным кодом.

Для того, чтобы опробовать Brython, я решил написать классическую Змейку.

Так как я не специалист по работе с Canvas в HTML и не разработчик игр, я решил использовать эту JavaScript-реализацию в качестве отправной точки. Когда-то я уже создавал свою Змейку на основе Canvas, но эта реализация более аккуратная и компактная.

А еще автор написал ее менее чем за 5 минут. Надо отдать должное Крису Делеону, это очень впечатляет.

Итак, я добавил к реализации Криса подсчет очков и сохранение лучшего результата, а также немного улучшил интерфейс (добавил кнопку паузы и кнопку с инструкциями). Затем я портировал игру на Brython.

Также я модифицировал его код, чтобы он работал в режиме strict, так как в реализации Криса используются вещи вроде неявных глобальных переменных, которые, на мой взгляд, не отражают того, как выглядит большая часть кода на JS (не критикую автора он программировал на время). Я хотел получить хорошее сравнение кода на Brython и JS.

JavaScript оказался таким, и я не буду размещать этот код здесь, потому наша цель сфокусироваться на Brython.

Несмотря на то, что большая часть кода на Brython была дословным переводом с JS, некоторые части (например, функционал подсчета очков) были написаны непосредственно на Brython, а затем реализованы на JS чтобы посмотреть на отличия.

Окончательный результат выглядит следующим образом:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Brython Snake</title>    <script type="text/javascript" src="http://personeltest.ru/aways/cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js">    </script>    <link rel="stylesheet" href="http://personeltest.ru/aways/stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">    <style> /* Removed to keep the snippet short. Find the full file here: */ </style></head><body onload="brython()">    <h1 class="text-center">Snake built with <a href="http://personeltest.ru/aways/brython.info">Python!</a></h1>    <canvas id="game-board" width="400" height="400"></canvas>    <br>    <h3 id="score" class="text-center">Score: 0</h3>    <br>    <h6 id="high-score" class="text-center">High Score: 0</h6>    <br>    <div class="text-center">        <button id="instructions-btn" class="btn btn-info">Instructions</button>    </div>    <script type="text/python">                from browser import document, html, window        from javascript import Math                score = 0        high_score = 0        px = py = 10        gs = tc = 20        ax = ay = 15        xv = yv = 0        trail = []        tail = 5        pre_pause = [0,0]        paused = False           def game():            global px, py, tc, gs, ax, ay, trail, tail, score            px += xv            py += yv            if px < 0:                px = tc-1            if px > tc-1:                px = 0            if py < 0:                py = tc-1            if py > tc-1:                py = 0            ctx.fillStyle = "black"            ctx.fillRect(0, 0, canvas.width, canvas.height)            ctx.fillStyle = "lime"            for i in range(len(trail)):                ctx.fillRect(trail[i][0]*gs, trail[i][1]*gs, gs-2, gs-2)                if trail[i][0] == px and trail[i][1] == py:                    score = score if paused else 0                     tail = 5            trail.insert(0, [px, py])            while len(trail) > tail:                trail.pop()                    if ax == px and ay == py:                tail += 1                ax = Math.floor(Math.random()*tc)                ay = Math.floor(Math.random()*tc)                score += 1            update_score(score)            ctx.fillStyle = "red"            ctx.fillRect(ax*gs, ay*gs, gs-2, gs-2)                def update_score(new_score):            global high_score            document["score"].innerHTML = "Score: " + str(new_score)            if new_score > high_score:                document["high-score"].innerHTML = "High Score: " + str(new_score)                high_score = new_score        def key_push(evt):            global xv, yv, pre_pause, paused            key = evt.keyCode            if key == 37 and not paused:                xv = -1                yv = 0            elif key == 38 and not paused:                xv = 0                yv = -1            elif key == 39 and not paused:                xv = 1                yv = 0            elif key == 40 and not paused:                xv = 0                yv = 1            elif key == 32:                temp = [xv, yv]                xv = pre_pause[0]                yv = pre_pause[1]                pre_pause = [*temp]                paused = not paused                    def show_instructions(evt):            window.alert("Use the arrow keys to move and press spacebar to pause the game.")                canvas = document["game-board"]        ctx = canvas.getContext("2d")        document.addEventListener("keydown", key_push)        game_loop = window.setInterval(game, 1000/15)        instructions_btn = document["instructions-btn"]        instructions_btn.addEventListener("click", show_instructions)        </script></body></html>


Итак, основываясь на этом фрагменте, давайте разберемся в базовых понятиях Brython

Подключение brython.js


Для использования Brython не требуется установка. Просто импортируйте скрипт внутри head :

<script type=text/javascript src=https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js">


Запуск Brython


Для того, чтобы Brython мог транслировать и исполнять код на Python так, будто это код на JS, нам нужно вызвать Brython как раз тогда, когда загрузится тело документа. Например, так:

<body onload=brython()>


Этот тег будет выполнять поиск тегов script c типом "text/python" и запускать их код.

API для работы с вебом


JavaScript по умолчанию дает доступ к объектам вроде document и window, необходимым в любом JS-проекте. Соответственно, Brython тоже должен иметь возможность работать с ними.

Для решения этой проблемы создатели Brython могли бы просто дать разработчикам возможность обращаться к этим объектам из кода на Python, но это привело бы к крикам дебаггеров о undefined variable и снижению производительности.

Таким образом, чтобы использовать эти API, мы должны импортировать их точно так же, как импортируем любой другой модуль на Python:

from browser import document, html, window


И вам не нужно выполнять команду pip install. В конце концов, вы вставляете все это в HTML! Просто добавьте требуемые импорты, с остальным разберется Brython.

Чтобы увидеть насколько хорошо все это работает, я попробовал использовать несколько различных методов из Web API: alert, setInterval, addEventListener и т.д. Все они сработали так, как должны были.

Встроенные объекты и методы JavaScript



В Змейке, как только змея съест яблоко, нам нужно сгенерировать новое яблоко в случайном месте.

Однако, я не могу использовать модуль random из библиотеки Python*. Так как же я могу сгенерировать случайное число (без написания собственной библиотеки)?

Оказалось, что в Brython более широкая поддержка JavaScript, чем я думал. Смотрите:

from javascript import Mathrandom_num = Math.floor(Math.random()*10)


Благодаря модулю javascript, если есть объект, к которому я могу получить доступ с помощью JS, то я могу получить к нему доступ с помощью Brython.

Если я импортирую JavaScript-библиотеку (jQuery, Bootstrap) и захочу использовать ее методы я могу сделать это с помощью from javascript import <библиотека>. И, естественно, я также могу использовать встроенные JS-объекты, например, Date или String.

*По всей видимости, Brython поставляется с рядом стандартных библиотек Python, реализованных непосредственно на JavaScript, и если у какого-то модуля нет JS-версии, то вы все равно сможете импортировать его. Brython получит версию на чистом Python и код импортированного модуля будет работать вместе с кодом Brython. Впрочем, модуль random у меня не заработал но я могу понять, почему.


Специфические конструкции



В Python, если я хочу распаковать список, я могу написать list2 = [*list1]. Также, если я хочу присвоить переменной значения исходя из некоторого условия, я могу написать foo = 10 if condition else 20.

У этих конструкций есть эквиваленты в JavaScript: оператор spread ( [...arr] ) и тернарный оператор ( let foo = condition ? 10 : 20 ).

Но поддерживает ли их Brython?

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

Отладка


Честно говоря, я думал, что отладка в Brython будет ужасной.

На самом деле все не так уж и плохо.

Конечно, я написал совсем небольшой и не очень сложный проект, но ошибки, брошенные Brython были в основном точными и довольно понятными.

Это верно, по крайней мере, в отношении синтаксических ошибок. Импорт модулей из библиотеки Python совсем другая история.

Производительность


image

JavaScript Snake

image

Brython Snake

Как и ожидалось, код на Brython работает медленнее, чем JavaScript. В моем случае он был примерно в 1.7 раз медленнее.

Подозреваю, что в более сложных проектах Brython будет в несколько раз медленнее, чем чистый JS.

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

Я действительно пытался использовать редактор Brython Editor для преобразования моего кода на Brython в JS и запуска получившегося кода на веб-странице, но из-за огромного количества ошибок я пока от этого отказался. Впрочем, я приложил к этому не слишком много усилий.

Заключительные мысли о Brython


Честно говоря, я был весьма впечатлен Brython. Вот несколько плюсов и минусов из моего собственного опыта работы с языком:

Плюсы

  • Мне удалось написать Змейку без лишних хлопот, причем опыт отладки оказался на удивление положительным.
  • В моем простом проекте Brython беспрепятственно взаимодействовал с нативными JavaScript-объектами, доступными на странице
  • Я ценю тот факт, что мой код выглядит чище на Python, а также мне нравится, что я могу использовать полезные конструкции из Python для написания браузерного кода.
  • В случае с моей игрой, хоть Brython загружается медленнее, чем JavaScript, пользователь этой разницы не замечает.
  • Мне приятно видеть Python в исходном коде моего сайта.


Минусы

  • Брайтон работает значительно медленнее, чем чистый JS.
  • Для использования Brython разработчику необходимо иметь опыт работы с JavaScript.
  • Вы неизбежно столкнетесь с большим количеством ошибок
  • Документации Brython и его сайту есть куда расти в плане удобства навигации и возможностей обучения
  • У Brython отсутствует сильная экосистема и инструменты развития.


В целом, закончив свой первый проект на Brython, могу с уверенностью сказать, что когда-нибудь попробую еще раз.

Тем не менее, я считаю, что в настоящее время Brython больше подходит для JavaScript-разработчиков, знакомых с Python и уставших от JS, а не для Python-разработчиков, которые хотят заниматься веб-разработкой, не изучая JavaScript.

Я думаю, что понимание JavaScript необходимо для того, чтобы хорошо работать с Brython. И если вы решите потратить время на изучение JavaScript, чтобы вам было легче писать на Brython, то вы можете просто использовать JavaScript.

Другие альтернативы JS в браузере


image

Причина, по которой я выбрал Brython, заключалась в том, что из большинства вариантов перехода от Python к JS, о которых я впервые узнал, он был единственным, у кого ведется активная разработка на GitHub. Большинство просмотренных мною транспайлеров из Python в JavaScript не имеют коммитов в течение нескольких лет.

Впрочем, есть и другие альтернативы.

Pyodide, например, кажется интересным вариантом. Он компилирует Python (вместе с его научными библиотеками) в WebAssembly, что позволяет ему запускаться в браузере.

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

Таким образом, можно написать компилятор, который будет переводить Python (или любой другой язык) в WebAssembly, что позволит ему работать в браузере.

Это амбициозный и перспективный проект, который, скорее всего, приведет к тому, что мы увидим все больше веб-разработок без JavaScript.

Тем не менее, он все еще находится в зачаточном состоянии (~3 года), так что, вероятно, потребуется некоторое время, прежде чем мы увидим, что JavaScript регулярно заменяется другими языками.

И пока мы этого ждем, вам придется воспользоваться инструментами вроде Brython, если вы действительно не можете иметь дело с JavaScript.

Но, честно говоря, это неплохое начало!

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Перевод NodeJS 12 пакетов для продуктивности разработчика

15.09.2020 14:04:30 | Автор: admin


Менеджер процессов для продакшна с балансировщиком нагрузки. Обёртки над отладкой и хуками Git, защита express-приложений через HTTP-заголовки, утилита в более чем 180 функциями для работы с датами и другие инструменты, которые сэкономят ваше время. Подборка особенно полезна начинающим разработчикам NodeJS, но может порадовать опытных скептиков.

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

1. Husky


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


Исходники husky

Установка


yarn add husky

Применение


Пример хуков с husky:

// package.json{  "husky": {    "hooks": {      "pre-commit": "npm lint",      "pre-push": "npm test"    }  }}

pre-commit запускается перед коммитом.
pre-push перед отправкой в репозиторий.



2. Dotenv


Dotenv модуль без зависимостей. Он загружает переменные среды из файла .env в process.env. Хранение конфигурации в среде отдельно от кода основано на методологии приложения двенадцати факторов. Исходники dotenv.

Установка


yarn add dotenv

Применение


Как можно раньше в вашем приложении пропишите require и установите значения dotenv:

require('dotenv').config()

Создайте .env файл в корневом каталоге вашего проекта. Добавьте переменные среды в новые строки в виде NAME=VALUE. Например:

DB_HOST=localhostDB_USER=rootDB_PASS=s1mpl3

Теперь process.env содержит ключи и значения из файла .env:

const db = require('db')db.connect({ host: process.env.DB_HOST, username: process.env.DB_USER, password: process.env.DB_PASS})



3. date-fns


Date-fns похож на lodash, но создан для работы с датами. Предоставляет полный, но простой и последовательный набор инструментов манипуляций с датами JavaScript в браузере и Node.JS.


Исходники date-fns

Установка


yarn add date-fns

Применение


Пример с date-fns:

import { compareAsc, format } from 'date-fns'format(new Date(2014, 1, 11), 'yyyy-MM-dd')  //=> '2014-02-11'const dates = [    new Date(1995, 6, 2),    new Date(1987, 1, 11),    new Date(1989, 6, 10),  ]  dates.sort(compareAsc)  //=> [  //   Wed Feb 11 1987 00:00:00,  //   Mon Jul 10 1989 00:00:00,  //   Sun Jul 02 1995 00:00:00  // ]

Документация с примерами и вариантами использования.



4. Bunyan


Bunyan это простая в использовании и производительная библиотека логирования JSON для Node.


Исходники bunyan

Установка


yarn add bunyan

Обратите внимание: CLI bunyan написан так, чтобы быть совместимым (в пределах разумного) со всеми версиями логов Bunyan. Поэтому вы можете установить его глобально: yarn add global bunyan, чтобы получить этот инструмент в PATH, а затем использовать локальные установки Bunyan для приложений.

Применение


Bunyan это простая и быстрая библиотека ведения журнала JSON для сервисов Node.js.

// hi.jsconst bunyan = require('bunyan');const log = bunyan.createLogger({name: "myapp"});log.info("hi");

Вот что возвращается на консоль, если вы запускаете node hi.js.





5. Ramda


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


Исходники ramda

Установка


yarn add ramda

Применение


import * as R from 'ramda'const greet = R.replace('{name}', R.__, 'Hello, {name}!'); greet('Alice'); //=> 'Hello, Alice!'

Примеры кода



6. Debug


Debug это крошечная утилита отладки JavaScript, смоделированная по образцу техники отладки Node.JS.


Исходники Debug

Установка


yarn add debug

Применение


Debug предоставляет функцию. Просто передайте этой функции имя вашего модуля, и она вернёт декорированную версию console.error для передачи отладочных операторов.

const debug = require('debug');const log = debug('http:server');const http = require('http');const name = 'My App name';log('booting %o', name);http.createServer((req, res) => {  log(req.method + ' ' + req.url);  res.end('debug examplen');}).listen(3200, () => {  log('listening');});// выполните в терминале// DEBUG=http:server node app.js

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




7. Flat


Flat принимает объект и делает его плоским. Можно также свернуть объект, разделённый ключами. [Прим. перев. разделиелем может быть не только точка].


Исходники Flat

Установка


yarn add flat

Применение


const flatten = require('flat')flatten({      key1: {          keyA: 'valueI'      },      key2: {          keyB: 'valueII'      },      key3: { a: { b: { c: 2 } } }  })// {  //   'key1.keyA': 'valueI',  //   'key2.keyB': 'valueII',  //   'key3.a.b.c': 2  // }




8. JSON5


Формат обмена данными JSON5 это надмножество JSON, целью которого является смягчение некоторых ограничений JSON путём расширения его синтаксиса для включения некоторых возможностей ECMAScript 5.1.


Исходники JSON5

Установка


yarn add json5  const JSON5 = require('json5')

Применение


Обратите внимание на расширение файла. JSON5 это надмножество, расширение JSON.

{  // комментарии  unquoted: 'and you can quote me on that',  singleQuotes: 'I can use "double quotes" here',  lineBreaks: "Look, Mom! \No \\n's!",  hexadecimal: 0xdecaf,  leadingDecimalPoint: .8675309, andTrailing: 8675309.,  positiveSign: +1,  trailingComma: 'in objects', andIn: ['arrays',],  "backwardsCompatible": "with JSON",}



9. ESLint


ESLint это замечательный инструмент, чтобы избегать ошибок и установить стандарты кодирования командам разработчиков. ESLint инструментом для выявления и представления закономерностей, обнаруженных в коде ECMAScript/JavaScript.


Исходники ESLint

Установка и применение


yarn add eslint

Затем настройте конфигурационный файл:

./node_modules/.bin/eslint --init

После этого можно запускать ESLint в любом файле или каталоге, например:

./node_modules/.bin/eslint yourfile.js

Документация со множеством примеров по началу работы и настройке.



10. PM2


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


Исходники pm2

Установка


yarn add global pm2

Запуск приложения


Вы можете запустить любое приложение (Node.js, Python, Ruby, бинарные файлы в $PATH и так далее) вот так:

pm2 start app.js

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

А вот как вы можете вывести список всех запущенных приложений:

pm2 ls



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



11. Helmet


Helmet помогает защитить приложения express через HTTP-заголовки. Это не серебряная пуля, но она может помочь.


Исходники Helmet

Установка


yarn add helmet

Применение


Helmet написан в стиле Connect и совместим с фреймворками, похожими на Express. Если нужна поддержка Koa, смотрите koa-helmet.)

const express = require("express");  const helmet = require("helmet");const app = express();app.use(helmet());

Функция helmet это оболочка вокруг 11 меньших промежуточных программ. Другими словами эквивалентно

// Это...app.use(helmet());// ...И это: app.use(helmet.contentSecurityPolicy());  app.use(helmet.dnsPrefetchControl());  app.use(helmet.expectCt());  app.use(helmet.frameguard());  app.use(helmet.hidePoweredBy());  app.use(helmet.hsts());  app.use(helmet.ieNoOpen());  app.use(helmet.noSniff());  app.use(helmet.permittedCrossDomainPolicies());  app.use(helmet.referrerPolicy());  app.use(helmet.xssFilter());



12. Compression


Compression инструмент для сжатия данных.


Исходники compression

Установка


yarn add compression

Применение


При использовании этого модуля вместе с express или connect просто вызовите compression() в промежуточном ПО. Запросы, проходящие через промежуточное ПО, будут сжаты.

const compression = require('compression')  const express = require('express')const app = express()// сжимать все запросы  app.use(compression())// ...

А какие инструменты в работе с NodeJS используете вы?

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:



Подробнее..

Перевод Как Chrome DevTools с велосипеда на стандарт пересели

25.09.2020 14:16:06 | Автор: admin


Краткая заметка о том, как в команде Chrome DevTools проходила миграция с внутреннего загрузчика модулей на стандартные модули JavaScript. Рассказываем, насколько и почему затянулась миграция, о скрытых издержках миграции и расскажем о выводах команды DevTools после завершения миграции. Но начнём с истории инструментов веб-разработчика.

Введение


Как вы, возможно, знаете, Chrome DevTools это веб-приложение HTML, CSS и JavaScript. За эти годы DevTools стала многофункциональной, умной и хорошо осведомленной о современной веб-платформе. Хотя DevTools расширился, его архитектура во многом напоминает первоначальную, когда инструмент был частью WebKit.

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

Вначале не было ничего


Сейчас у фронтенда есть множество модульных систем и их инструментов, а также стандартизированный формат модулей JavaScript. Ничего этого не было, когда начинался DevTools. Инструмент построен поверх кода WebKit, написанного более 12 лет назад.

Первое упоминание о модульной системе в DevTools относится к 2012 году: это было введение списка модулей с соответствующим списком исходников. Часть инфраструктуры Python, используемой в то время для компиляции и сборки DevTools. В 2013 года модули были извлечены в файл frontend_modules.json этим коммитом, а затем, в 2014 году, в отдельные module.json (здесь). Пример module.json:

{  "dependencies": [    "common"  ],  "scripts": [    "StylePane.js",    "ElementsPanel.js"  ]}


С 2014 года module.json используется в инструментах разработчика для указания на модули и исходные файлы. Тем временем экосистема веба быстро развивалась, и было создано множество форматов модулей: UMD, CommonJS и в конечном итоге стандартизированные модули JavaScript. Однако DevTools застрял на module.json. Не стандартизированная, уникальной модульная система имела несколько недостатков:

  1. module.json требовал собственные инструменты сборки.
  2. Не было интеграции с IDE. Конечно же, она требовала специальных инструментов для создания файлов, понятных ей: (оригинальный скрипт генерации jsconfig.json для VS Code).
  3. Функции, классы и объекты были помещены в глобальную область видимости, чтобы сделать возможным совместное использование между модулями.
  4. Был важен порядок перечисления файлов. Не было никакой гарантии, что код, на который вы полагаетесь, загружен, кроме проверки человеком.

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

Преимущества стандарта


Мы выбрали модули JavaScript. Когда принималось это решение, модули в языке еще включались флагом в Node.js и большое количество пакетов NPM не поддерживало их. Несмотря на это, мы пришли к выводу, что модули JavaScript были лучшим вариантом.

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

Поскольку модули JavaScript были стандартными, это означало, что IDE, такие как VS Code, инструменты проверки типов, похожие на компилятор Closure/TypeScript, и инструменты сборки вроде Rollup и минификаторов смогут понять написанный исходный код. Более того, когда новый человек присоединяется к команде DevTools, ему не приходится тратить время на изучение проприетарного module.json.

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

Сколько стоит блеск новизны?


Несмотря на то, что модули JavaScript имели множество преимуществ, которые мы хотели бы использовать, мы оставались в мире module.json. Использование преимуществ модулей языка означало, что мы должны вкладывать значительные усилия в технический долг. Между тем, миграция могла вывести из строя функции и ввести баги регрессии.

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

Последний пункт оказался очень важным. Несмотря на то, что теоретически мы могли добраться до модулей JavaScript, во время миграции мы получили бы код, который должен был бы учитывать оба типа модулей. Такое не только технически сложно, но и означает, что все инженеры, работающие над DevTools, должны знать, как работать в такой среде. Они должны были бы постоянно спрашивать себя: Что происходит в этом коде, это module.json или JS, и как я могу внести изменения?.

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


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

  1. Убедиться, что стандартные модули максимально полезны.
  2. Убедиться, что интеграция с существующими модулями на базе module.json безопасна и не приводит к негативному воздействию на пользователя (ошибки регрессии, разочарование пользователя).
  3. Давать руководства по миграции DevTools. В первую очередь с помощью встроенных в процесс сдержек и противовесов, чтобы предотвратить случайные ошибки.

Электронная таблица, преобразования и технический долг


Цель была ясна. Но ограничения module.json оказалось трудно обойти. Потребовалось несколько итераций, прототипов и архитектурных изменений, прежде чем мы разработали удобное решение. Мы закончили тем, что написали проектный документ со стратегией миграции. В этом документе указывалась первоначальная оценка времени: 2-4 недели.

Самая интенсивная часть миграции заняла 4 месяца, а от начала до конца прошло 7 месяцев!


Первоначальный план, однако, выдержал испытание временем: мы хотели научить среду выполнения DevTools загружать все файлы, старым способом использовать перечисленные в массиве scripts module.json, в то время как все файлы, перечисленные в массиве modules должны были загружаться динамическим импортом языка. Любой файл, который будет находиться в массиве modules, может работать с import и export из ES6.

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


Фрагмент таблицы миграции здесь.

Фаза экспорта


Первым этапом было добавление операторов экспорта для всех сущностей, которые должны быть разделены между модулями/файлами. Трансформация автоматизировалась с помощью запуска скрипта для каждой папки. Допустим, в module.json есть такая сущность:

Module.File1.exported = function() {  console.log('exported');  Module.File1.localFunctionInFile();};Module.File1.localFunctionInFile = function() {  console.log('Local');};


Здесь Module это имя модуля. File1 имя файла. В дереве кода это выглядит так: front_end/module/file1.JS.

Код выше преобразуется в такой:

export function exported() {  console.log('exported');  Module.File1.localFunctionInFile();}export function localFunctionInFile() {  console.log('Local');}/** Legacy export object */Module.File1 = {  exported,  localFunctionInFile,};


Первоначально мы планировали переписать импорт в один файл на этом этапе. Например, в приведенном выше примере мы бы переписали Module.File1.localFunctionInFile на localFunctionInFile. Однако мы осознали, что было бы проще автоматизировать и безопаснее разделить эти два преобразования. Таким образом, перенос всех сущностей в один файл станет второй подфазой импорта.

Поскольку добавление ключевого слова export превращает файл из скрипта в модуль, большая часть инфраструктуры DevTools должна была быть обновлена соответствующим образом. Инфраструктура включала среду выполнения с динамическим импортом, а также такие инструменты, как ESLint для запуска в режиме модуля.

Одна неприятность заключалась в том, что наши тесты выполнялись в нестрогом режиме. Модули JavaScript подразумевают, что файлы работают в строгом режиме. Это влияло на тесты. Как оказалось, нетривиальное количество тестов полагалось на нестрогий режим, включая тест, в котором присутствовал оператор with.

В конце концов, обновление самой первой папки (добавление export) заняло около недели и несколько попыток с перекладываниями.

Фаза импорта


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

Например, следующие сущности module.json:

Module.File1.exported();AnotherModule.AnotherFile.alsoExported();SameModule.AnotherFile.moduleScoped();


Преобразуются в:

import * as Module from '../module/Module.js';import * as AnotherModule from '../another_module/AnotherModule.js';import {moduleScoped} from './AnotherFile.js';Module.File1.exported();AnotherModule.AnotherFile.alsoExported();moduleScoped();


Однако при таком подходе есть оговорки:

  1. Не каждая сущность была названа по принципу Module.File.symbolName. Некоторые сущности были названы Modele.File или даже Module.CompletelyDifferentName. Несоответствие означало, что мы должны были создать внутреннее сопоставление от старого глобального объекта к новому импортированному объекту.
  2. Иногда возникали конфликты имен moduleScoped. Наиболее заметно, что мы использовали шаблон объявления определенных типов Events, там, где каждая сущность названа просто Events. Это означало, что при прослушивании нескольких типов событий, объявленных в разных файлах, в операторе import у этих Events возникнет коллизия именования.
  3. Как оказалось, между файлами существовали циклические зависимости. Это было прекрасно в контексте глобальной области видимости, так как сущность использовалась после загрузки всего кода. Однако, если вам требуется импорт, циклическая зависимость проявит себя. Такое не приводит к проблеме сразу, если только у вас нет побочных вызовов функций в коде глобальной области видимости, (они были у DevTools). В общем, потребовалось некоторое хирургическое вмешательство и рефакторинг, чтобы обезопасить трансформацию.


Дивный новый мир модулей JavaScript


В феврале 2020 года, через 6 месяцев после старта в сентябре 2019 года, были выполнены последние очистки в папке ui/. Так миграция неофициально закончилась. Когда осела пыль, мы официально отметили миграцию как законченную 5 марта 2020 года.

Теперь DevTools работают только с модулями JavaScript. Мы все еще помещаем некоторые сущности в глобальную область видимости (в файлах легаси module.js) для устаревших тестов или интеграций с другими частями инструментов разработчика архитектуры. Они будут удалены со временем, но мы не рассматриваем их как блокирующие развитие. У нас также есть руководство по стилю работы с модулями JavaScript.

Статистика


Консервативные оценки количества CL (аббревиатура changelist термин, используемый в Gerrit, аналогичное пул-реквесту GitHub), участвующих в этой миграции, составляют около 250 CL, в основном выполняемых 2 инженерами. У нас нет окончательной статистики о размере внесенных изменений, но консервативная оценка измененных строк (сумма абсолютной разницы между вставками и удалениями для каждого CL) составляет примерно 30 000 строк, то есть около 20% всего интерфейсного кода DevTools.

Первый файл с применением экспорта поддерживается в Chrome 79, выпущенном в стабильном релизе в декабре 2019 года. Последнее изменение для перехода на импорт поставляется в Chrome 83, выпущенном в стабильном релизе в мае 2020 года.

Мы знаем об одной регрессии из-за миграции в стабильном Chrome. Автозавершение фрагментов кода в меню команд сломалось из-за постороннего экспорта по умолчанию. Было и несколько других регрессий, но наши автоматизированные тестовые наборы и пользователи Chrome Canary сообщили о них. Мы исправили ошибки до того, как они могли попасть в стабильные релизы Chrome.

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

Чему мы научились?


  1. Принятые в прошлом решения могут оказать долгосрочное влияние на ваш проект. Несмотря на то, что модули JavaScript (и другие форматы модулей) были доступны в течение довольно долгого времени, DevTools не был в состоянии оправдать миграцию. Решение о том, когда мигрировать, а когда нет, трудно и держится на обоснованных догадках.
  2. Первоначальные оценки времени недели, а не месяцы. В значительной степени это связано с тем, что мы обнаружили больше неожиданных проблем, чем ожидали при первоначальном анализе затрат. Даже при том, что план миграции был основательным, технический долг блокировал работу чаще, чем нам хотелось бы.
  3. Миграция включала большое количество (казалось, не связанных между собой) очисток технического долга. Переход к современному стандартизированному формату модулей позволил нам перестроить лучшие практики кодирования на современную веб-разработку. Например, мы смогли заменить пользовательский упаковщик Python на минимальную конфигурацию Rollup.
  4. Несмотря на большое влияние на нашу кодовую базу (~20% измененного кода), было зарегистрировано очень мало регрессий. Хотя было много проблем с миграцией первых двух файлов, через некоторое время у нас был надежный, частично автоматизированный рабочий процесс. Это означало, что негативное влияние на наших стабильных пользователей было минимальным.
  5. Научить коллег тонкостям конкретной миграции трудно, а иногда и невозможно. Миграции такого масштаба трудно отслеживать и они требуют большого объема знаний в предметной области. Передача этих знаний другим людям, работающим в той же кодовой базе, сама по себе нежелательна для работы, которую они выполняют. Знание того, чем делиться, а чем не делиться необходимое искусство. Поэтому крайне важно сократить количество крупных миграций или, по крайней мере, не выполнять их одновременно.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:



Подробнее..

Перевод Задачки для фронтенд-тренировки клоны CodeSandbox, Robinhood, Whoishiring, Stackoverflow

10.07.2020 12:22:13 | Автор: admin
Предлагаем вашему вниманию идеи/задачи (не решения) для самостоятельного изучения и оттачивания мастерства.

График цен на акции в стиле Robinhood


image

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

Чему вы научитесь, построив график цен на акции в стиле Robinhood:

  • Как получать данные о ценах акций через API.
  • Как отображать график с различными временными шкалами (например, отображать цены за 3 месяца, полгода, год и т.д.)
  • Воссозданию анимации с прокручивающейся стоимостью.

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

Клон CodeSandbox


CodeSandbox это онлайн-редактор кода и инструмент прототипирования, позволяющий ускорить создание и обмен веб-приложениями.

image

Не переусложняйте, постарайтесь реализовать только самые основные функции. Сосредоточьтесь на редакторе, так как это самая полезная функция.

Чему вы научитесь, создав клон CodeSandbox:

  • Как рендерить и запускать HTML, CSS и JavaScript внутри браузера.
  • Как осуществлять перезагрузку с отображением изменения в реальном времени как в редакторе, так и в полном просмотре.
  • Как сгенерировать встраиваемый URL. Встраивание позволяет включить сендбокс в документацию, сообщение в блоге или на сайте, используя iframe (или куда угодно, где есть поддержка Embedly, например Medium, Reddit, Trello и Notion). Вы можете показывать только код, предварительный просмотр или все вместе.

Клон Whoishiring


Whoishiring представляет наиболее релевантные вакансии в виде карты. Соискатели легко могут находить работодателей в наиболее привлекательном для них месте.

image

Чему вы научитесь, создав клон Whoishiring:

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

Клон Stackoverflow (только вопросы и ответы)


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

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

image

Чему вы научитесь, построив клон StackOverflow.

  • Работе с базой данных, такой как PostgreSQL или MongoDB. Вопросы и ответы должны сохраняться в базе данных и извлекаться из нее всякий раз, когда кто-то открывает ваш клон StackOverflow.
  • Тегированию сообщений и реализации поиска с индексированием. Вы должны обеспечить лаконичный, но всесторонний поиск для пользователей. Также нужно реализовать возможность осуществлять поиск по вопросам и ответам с помощью простых ключевых слов вроде [react] или [javascript].

Монитор времени работы сайта


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

image

Чему вы научитесь, создав клон монитора времени работы:

  • Работе с терминалом. Как пользоваться командной строкой и проверять статус сайта. Если сайт возвращает код 200, ничего не делайте. Если он вернет код 404 или 500, сообщите об этом по электронной почте.
  • Построению графиков. Все хотят пользоваться интуитивно понятными и свежо выглядящими приложениями. Создавайте красивые графики для отображения состояния сервера.

Маятник Ньютона на CSS


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

image

Чему вы научитесь, построив клон маятник Ньютона:

  • Работе с keyframe в CSS и созданию анимаций.

Если вы решите использовать Canvas в JavaScript, то это здорово.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Полезное


Подробнее..

Перевод Data Science, ИИ и машинное обучение без программирования

15.07.2020 00:07:53 | Автор: admin
Независимо от уровня вашей экспертизы, если вы хотите эффективно работать с данными и получать от этого удовольствие, вам необходимо знать о методах, не требующих написания кода.

image


Методы работы с данными, не требующие программирования, стали очень популярными и незаменимыми в наш информационный век. Если вы пользуетесь этими методами, то это не значит, что вы не умеете программировать. На самом деле, для работы с этими методами, вам необходимо иметь определенные навыки написания кода. Data Science и искусственный интеллект довольно сложные области для применения методов, не требующих написания кода, но ряд компаний и стартапов смогли использовать всю мощь искусственного интеллекта, чтобы раздвинуть границы технологий. Теперь утомительные задачи очистки данных и формирования прогнозов могут быть автоматизированы и для этого не придется программировать. Obviously AI одна из ведущих компаний, которой удалось создать платформу, дающую возможность специалистам в области Data Science и ИИ делать свою работу, не прибегая к написанию программного кода.

Зачем использовать методы, не требующие написания кода?


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

image


Это супер-быстро


Использование методов работы без написания кода (подобных тем, что предлагает Obviously AI) дает вам гибкость в работе и позволяет в 5 раз сократить времязатраты на решение задач, требующих написания специальных программ. С помощью методов работы без кода вы можете сэкономить много времени при очистке и обработке данных, и вы можете использовать это время для внесения других исправлений, что позволит вам добиться максимальной продуктивности. Также Obviously AI дает вам возможность делать потрясающе точные прогнозы на основе ваших данных! Хорошее знание концепций, связанных с областью вашей работы, также является плюсом и поможет вам понять результаты вашего прогнозирования, сделанного с помощью инструментов вроде Obviously AI.

Это весело и интересно


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

Это повышает производительность


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

Про Obviously AI




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



image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Перевод Может ли нейтрон быть кубической формы? задумался я

13.07.2020 14:10:08 | Автор: admin
А потом я задумался, что такое "формы"?

А потом что такое "быть"?

image


Волновая функция, которая интерполирует между сферой (для N = 2) и кубом (при N ) для N = 2, 4, 8, 12

Нейтронные звезды могут придавать нейтронам кубическую форму

Wired, 16 августа 2011 года

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

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

Если принять этот результат за чистую монету, это означает, что теоретики в области нейтронных звезд попали в беду. [Нейтронные звезды] должны превращаться в черные дыры при меньших массах", сказал физик-теоретик Фелипе Хосе Ланес-Эстрада из Мадридского университета Комплутенсе, соавтор исследования, опубликованного 9 августа на сайте с препринтами arXiv.

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

Звезда с массой, в 9-20 раз превышающей массу Солнца, взорвется как сверхновая к концу своей жизни. При таком весе звезда недостаточно тяжела, чтобы набрать критическую свехрплотность и сжаться в черную дыру. Вместо этого ее ядро распадается на сферу шириной не более 15 миль. Эта сфера настолько плотна, что одна чайная ложка вещества, из которого она состоит, весит столько же, сколько и вся масса Земли, умноженная на 18.

В конце прошлого года астрономы обнаружили самую большую в мире нейтронную звезду под названием J1614-22307 Масса этой звезды равнялась массе Солнца, умноженной на 1.97. Самая массивная нейтронная звезда до этого открытия имела массу, равную 1.67 массы Солнца.

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

Когда Ланес-Эстрада и его коллега по университету Гаспар Морено Наварро услышали о J1614-2230, они захотели побольше узнать о процессах внутри этой звезды.

Эти двое знали о модели 1970-х годов, предполагающей, что чистые нейтроны могут образовывать кристаллическую решетку под невероятным давлением (подобно тому, как углерод формирует алмазы в недрах Земли). Когда они построили компьютерную модель под эту идею, они обнаружили, что под давлением, возникающем в глубине нейтронных звезд, нейтроны деформируются из сфер в кубы.

Оптимальная плотность, при который формируются сферы, (в том числе нейтроны) примерно 74%. Независимо от размещения, между ними всегда есть пространство как c апельсинами на витрине супермаркета, сказал Ланес-Эстрада. Если вы хотите разложить апельсины максимально рационально, часть из них помнется. Разложите их на витрине, высотой в полтора метра, и нижние будут придавлены.

Гравитация преобразует частицы материи в простейший, наиболее рационально упакованный объект. Как правило, таким объектом является сфера, похожая на Землю. Сами частицы, однако, не затрагиваются по отдельности; гравитация слишком слаба, чтобы преодолеть сильные связи, которые удерживают нейтроны и другие частицы вместе. Но если сила гравитации будет достаточно велика, она может преодолеть эти связи.

Таким образом, в глубине вновь открытой нейтронной звезды, давление ядра которой может быть в два раза выше, чем у остальных, наиболее эффективной формой нейтрона может быть куб. Они будут сглажены со всех сторон, как кости, при этом показатели силы давления, начинаются с значений, наблюдаемых на уровне 2.5 миль под землей, сказал Ланес-Эстрада.

Пока что исследование было встречено положительными отзывами.

Эксперт в области физики частиц Ричард Хилл (Richard Hill) из Университета Чикаго, например, отметил, что в исследовании нейтрон рассматривается как объект в отдельности, а не в совокупности.

Это интересная идея, но пока непонятно что происходит в совокупности нейтронов", сказал Хилл, который не участвовал в исследовании. Исходя из плотности в нейтронных звездах, он отметил, что идентичность отдельных нейтронов может быть размыта.

Ланес-Эстрада признал критику, сформулированную вторым физиком, который пожелал остаться анонимным. Ланес-Эстрада ответил, что также преследовал цель раздвинуть границы исследований.

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



image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Перевод Machine learning в анализе логов Netflix

21.09.2020 16:09:27 | Автор: admin

Представьте лог на 2,5 гигабайта после неудачной сборки. Это три миллиона строк. Вы ищете баг или регрессию, которая обнаруживается на миллионной строке. Вероятно, найти одну такую строку вручную просто невозможно. Один из вариантов diff между последней успешной и упавшей сборкой в надежде на то, что баг пишет в журналы необычные строки. Решение Netflix быстрее и точнее LogReduce под катом.

Netflix и строка в стоге лога


Стандартный md5 diff работает быстро, но выводит не меньше сотни тысяч строк-кандидатов на просмотр, поскольку показывает различия строк. Разновидность logreduce нечёткий diff с применением поиска k ближайших соседей находит около 40 000 кандидатов, но отнимает один час. Решение ниже находит 20 000 строк-кандидатов за 20 минут. Благодаря волшебству открытого ПО это всего около сотни строк кода на Python.

Решение комбинация векторных представлений слов, которые кодируют семантическую информацию слов и предложений, и хеша с учетом местоположения (LSH Local Sensitive Hash), который эффективно распределяет приблизительно близкие элементы в одни группы и далёкие элементы в другие группы. Комбинирование векторных представлений слов и LSH великолепная идея, появившаяся менее десяти лет назад.
Примечание: мы выполняли Tensorflow 2.2 на CPU и с немедленным выполнением для трансферного обучения и scikit-learn NearestNeighbor для k ближайших соседей. Существуют сложные приближенные реализации ближайших соседей, что были бы лучше для решения проблемы ближайших соседей на основе модели.

Векторное представление слов: что это и зачем?


Сборка мешка слов с k категориями (k-hot encoding, обобщение унитарного кодирования) типичная (и полезная) отправная точка дедупликации, поиска и проблем сходства неструктурированного и полуструктурированного текста. Такой тип кодирования мешка со словами выглядит как словарь с отдельными словами и их количеством. Пример с предложением log in error, check log.

{"log": 2, "in": 1, "error": 1, "check": 1}


Такое кодирование также представляется вектором, где индекс соответствует слову, а значение количеству слов. Ниже показывается фраза log in error, check log" в виде вектора, где первая запись зарезервирована для подсчета слов log, вторая для подсчета слов in и так далее:

[2, 1, 1, 1, 0, 0, 0, 0, 0, ...]

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

Посмотрим на словарь и векторные представления фразы problem authentificating. Слова, соответствующие первым пяти векторным записям, вообще не появляются в новом предложении.

{"problem": 1, "authenticating": 1}

Получается:

[0, 0, 0, 0, 1, 1, 0, 0, 0, ...]

Предложения problem authentificating и log in error, check log семантически похожи. То есть они по существу одно и то же, но лексически настолько различны, насколько это возможно. У них нет общих слов. В разрезе нечёткого diff мы могли бы сказать, что они слишком похожи, чтобы выделять их, но кодирование md5 и документ, обработанный k-hot с kNN этого не поддерживает.

Сокращение размерности использует линейную алгебру или искусственные нейронные сети для размещения семантически похожих слов, предложений или строк лога рядом друг с другом в новом векторном пространстве. Применяются векторные представления. В нашем примере log in error, check log может иметь пятимерный вектор для представления:

[0.1, 0.3, -0.5, -0.7, 0.2]

Фраза problem authentificating может быть

[0.1, 0.35, -0.5, -0.7, 0.2]


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

На самом деле вы заменили бы тысячи или более размерностей словаря всего лишь представлением в 100 размерностей, богатыми информацией (а не пятью). Современные подходы к снижению размерности включают разложение по сингулярным значениям матрицы совместной встречаемости слов (GloVe) и специализированные нейронные сети (word2vec, BERT, ELMo).

А как насчет кластеризации? Вернёмся к логу сборки


Мы шутим, что Netflix сервис производства логов, который иногда стримит видео. Логирование, стримы, обработка исключений это сотни тысяч запросов в секунду. Поэтому масштабирование необходимо, когда мы хотим применять прикладное ML в телеметрии и логировании. По этой причине мы внимательны к масштабированию дедупликации текста, к поиску семантического сходства и обнаружению текстовых выбросов. Когда проблемы бизнеса решаются в реальном времени, другого пути нет.

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

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

Вектор представления фразы log in error, check error может быть сопоставлен с двоичным числом 01. Затем 01 представляет кластер. Вектор problem authentificating с большой вероятностью также может быть отображен в 01. Так LSH обеспечивает нечёткое сравнение и решает обратную задачу нечёткое различие. Ранние приложения LSH были над многомерными векторными пространствами из набора слов. Мы не смогли придумать ни одной причины, по которой он не работал бы с пространствами векторного представления слов. Есть признаки, что другие думали так же.



Выше изображено использование LSH при размещении символов в той же группе, но в перевернутом виде.

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

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

Несколько примеров


Любимый пример семантического diff. 6892 строк превратились в 3.



Другой пример: эта сборка записала 6044 строки, но в отчете осталась 171. Основная проблема всплыла почти сразу на строке 4036.



Конечно, быстрее проанализировать 171 строку, чем 6044. Но как вообще мы получили такие большие логи сборок? Некоторые из тысяч задач сборки это стресс-тесты для потребительской электроники выполняются в режиме трассировки. Трудно работать с таким объёмом данных без предварительной обработки.



Коэффициент сжатия: 91366/455 = 205,3.

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

Заключение


Зрелость продуктов и SDK с открытым исходным кодом для трансферного обучения позволило решить проблему семантического поиска ближайшего соседа с помощью LSH в очень небольшом количестве строк кода. Мы заинтересовались особыми преимуществами, которые привносят в приложение трансферное обучение и точная настройка. Мы рады возможности решать такие проблемы и помогать людям делать то, что они делают, лучше и быстрее.

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

Если у вас есть какие-либо вопросы о возможностях в Netflix, обращайтесь к авторам в LinkedIn: Stanislav Kirdey, William High

А как вы решаете проблему поиска в логах?

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:



Подробнее..

Перевод HDTree настраиваемое дерево решений на Python

16.09.2020 18:22:11 | Автор: admin

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

TL;DR

  • Репозиторий HDTree
  • Дополняющий Notebook внутри examples. Каталог репозитория здесь (каждая иллюстрация, которую вы видите здесь, будет сгенерирована в блокноте). Вы сможете создавать иллюстрации самостоятельно.

О чём пост?


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

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

Мотивация и предыстория


Для диссертации я начал работать с деревьями решений. Моя цель сейчас реализовать ориентированную на человека ML-модель, где HDTree (Human Decision Tree, если на то пошло) это дополнительный ингредиент, который применяется как часть реального пользовательского интерфейса для этой модели. Хотя эта история посвящена исключительно HDTree, я мог бы написать продолжение, подробно описав другие компоненты.

Особенности HDTree и сравнение с деревьями решений scikit learn


Естественно, я наткнулся на реализацию деревьев решений scikit-learn [4]. Реализация sckit-learn имеет множество плюсов:

  • Она быстра и оптимизирована;
  • Написана на диалекте Cython. Cython компилируется в C-код (который, в свою очередь, компилируется в двоичный код), сохраняя при этом возможность взаимодействия с интерпретатором Python;
  • Простая и удобная;
  • Многие люди в ML знают, как работать с моделями scikit-learn. Вам помогут везде благодаря его пользовательской базе;
  • Она испытана в боевых условиях (её используют многие);
  • Она просто работает;
  • Она поддерживает множество методов предварительной и последующей обрезки [6] и предоставляет множество функций (например, обрезка с минимальными затратами и весами выборки);
  • Поддерживает базовую визуализацию [7].

Тем не менее, у нее, безусловно, есть некоторые недостатки:

  • Ее нетривиально изменять, отчасти из-за использования довольно необычного диалекта Cython (см. преимущества выше);
  • Нет возможности учитывать знания пользователей о предметной области или изменить процесс обучения;
  • Визуализация достаточно минималистичная;
  • Нет поддержки категориальных признаков;
  • Нет поддержки отсутствующих значений;
  • Интерфейс для доступа к узлам и обхода дерева громоздок и не понятен интуитивно;
  • Нет поддержки отсутствующих значений;
  • Только двоичные разбиения (смотрите ниже);
  • Нет многовариантных разбиений (смотрите ниже).

Особенности HDTree


HDTree предлагает решение большинства этих проблем, но при этом жертвует многими преимуществами реализации scikit-learn. Мы вернемся к этим моментам позже, поэтому не беспокойтесь, если вы еще не понимаете весь следующий список:

  • Взаимодействует с обучающим поведением;
  • Основные компоненты имеют модульную структуру и их довольно легко расширить (реализовать интерфейс);
  • Написана на чистом Python (более доступна);
  • Имеет богатую визуализацию;
  • Поддерживает категориальные данные;
  • Поддерживает отсутствующих значений;
  • Поддерживает многовариантные разделения;
  • Имеет удобный интерфейс навигации по структуре дерева;
  • Поддерживает n-арное разбиение (больше 2 дочерних узлов);
  • Текстовые представления путей решения;
  • Поощряет объясняемость за счет печати удобочитаемого текста.

Минусы:

  • Медленная;
  • Не проверена в боях;
  • Качество ПО посредственно;
  • Не так много вариантов обрезки. Хотя реализация поддерживает некоторые основные параметры.

Недостатков не много, но они критичны. Давайте сразу же проясним: не скармливайте этой реализации большие данные. Вы будете ждать вечно. Не используйте её в производственной среде. Она может неожиданно сломаться. Вас предупредили! Некоторые из проблем выше можно решить со временем. Однако скорость обучения, вероятно, останется небольшой (хотя логический вывод допустим). Вам нужно будет придумать лучшее решение, чтобы исправить это. Приглашаю вас внести свой вклад. Тем не менее, какие возможны варианты применения?

  • Извлечение знаний из данных;
  • Проверка интуитивного представление о данных;
  • Понимание внутренней работы деревьев решений;
  • Изучение альтернативных причинно-следственных связей в отношении вашей проблемы обучения;
  • Использование в качестве части более сложных алгоритмов;
  • Создание отчётов и визуализация;
  • Использование для любых исследовательских целей;
  • В качестве доступной платформы, чтобы легко проверить ваши идеи для алгоритмов дерева решений.

Структура деревьев решений


Хотя в этой работе не будут подробно рассмотрены деревья решений, мы резюмируем их основные строительные блоки. Это обеспечит основу для понимания примеров позже, а также подчеркнет некоторые особенности HDTree. На следующем рисунке показан фактический результат работы HDTree (за исключением маркеров).



Узлы

  • ai: текстовое описание правила проверки и разделения, которое использовалось на этом узле для разделения данных на его дочерние элементы. Отображает соответствующий атрибуты и словесное описание операции. Эти тесты *легко настраиваются* и могут включать любую логику разделения данных. Разработка собственных пользовательских правил поддерживается за счет реализации интерфейса. Подробнее об этом в разделе 3.
  • aii: оценка узла измеряет его чистоту, то есть то, насколько хорошо данные, проходящие через узел, разделены. Чем выше оценка, тем лучше. Записи также представлены цветом фона узлов. Чем больше зеленоватого оттенка, тем выше оценка (белый цвет означает нечистые, т.е. равномерно распределенные классы). Эти оценки направляют построение дерева и являются модульным и заменяемым компонентом HDTree.
  • aiii: рамка узлов указывает на то, сколько точек данных проходит через этот узел. Чем толще граница, тем больше данных проходит через узел.
  • aiv: список целей прогнозирования и меток, которые имеют точки данных, проходящие через этот узел. Самый распространенный класс отмечен .
  • av: опционально визуализация может отмечать путь, по которому следуют отдельные точки данных (иллюстрируя решение, которое принимается, когда точка данных проходит дерево). Это отмечено линией в углу дерева решений.

Ребра

  • bi: стрелка соединяет каждый возможный результат разделения (ai) с его дочерними узлами. Чем больше данных относительно родителя перетекает по краю, тем толще они отображаются.
  • bii: каждое ребро имеет удобочитаемое текстовое представление соответствующего результата разбиения.

Откуда разные разделения наборов и тесты?


К этому моменту вы уже можете задаться вопросом, чем отличается HDTree от дерева scikit-learn (или любой другой реализации) и почему мы можем захотеть иметь разные виды разделений? Попробуем прояснить это. Может быть, у вас есть интуитивное понимание понятия пространство признаков. Все данные, с которыми мы работаем, находятся в некотором многомерном пространстве, которое определяется количеством и типом признаков в ваших данных. Задача алгоритма классификации теперь состоит в том, чтобы разделить это пространство на не перекрывающиеся области и присвоить этим областям класс. Давайте визуализируем это. Поскольку нашему мозгу трудно возиться с высокой размерностью, мы будем придерживаться двухмерного примера и очень простой задачи с двумя классами, вот так:



Вы видите очень простой набор данных, состоящий из двух измерений (признаков/атрибутов) и двух классов. Сгенерированные точки данных были нормально распределены в центре. Улица, которая является просто линейной функциейf(x) = y разделяет эти два класса: Class 1 (правая нижняя) и Class 2 (левая верхняя) части. Также был добавлен некоторый случайный шум (синие точки данных в оранжевой области и наоборот), чтобы проиллюстрировать эффекты переобучения в дальнейшем. Задача алгоритма классификации, такого как HDTree (хотя он также может использоваться для задач регрессии), состоит в том, чтобы узнать, к какому классу принадлежит каждая точка данных. Другими словами, задана пара координат (x, y) вроде (6, 2). Цель в том, чтобы узнать, принадлежит ли эта координата оранжевому классу 1 или синему классу 2. Дискриминантная модель попытается разделить пространство объектов (здесь это оси (x, y)) на синюю и оранжевую территории соответственно.
Учитывая эти данные, решение (правила) о том, как данные будут классифицированы, кажется очень простым. Разумный человек сказал бы о таком подумайте сначала самостоятельно.
Это класс 1, если x > y, иначе класс 2. Идеальное разделение создаст функция y=x, показанная пунктиром. В самом деле, классификатор максимальной маржи, такой как метод опорных векторов [8], предложил бы подобное решение. Но давайте посмотрим, какие деревья решений решают вопрос иначе:



На изображении показаны области, в которых стандартное дерево решений с увеличивающейся глубиной классифицирует точку данных как класс 1 (оранжевый) или класс 2 (синий).
Дерево решений аппроксимирует линейную функцию с помощью ступенчатой функции.
Это связано с типом правила проверки и разделения, которое используют деревья решений. Они все работают по схемеattribute <threshold, что приведет к к гиперплоскостям, которые параллельны осям. В 2D-пространстве вырезаются прямоугольники. В 3D это были бы кубоиды и так далее. Кроме того, дерево решений начинает моделировать шум в данных, когда уже имеется 8 уровней, то есть происходит переобучение. При этом оно никогда не находит хорошего приближения к реальной линейной функции. Чтобы убедиться в этом, я использовал типичное разделение тренировочных и тестовых данных 2 к 1 и вычислил точность деревьев. Она составляет 93,84%, 93,03%, 90,81% для тестового набора и 94,54%, 96,57%, 98,81% для тренировочного набора (упорядочены по глубине деревьев 4, 8, 16). Тогда как точность в тесте уменьшается, точность обучения увеличивается.
Повышение эффективности тренировок и снижение результатов тестов признак переобучения.
Полученные деревья решений довольно сложны для такой простой функции. Самое простое из них (глубина 4), визуализированное с помощью scikit learn, уже выглядит так:



Я избавлю вас от деревьев сложнее. В следующем разделе мы начнем с решения этой проблемы с помощью пакета HDTree. HDTree позволит пользователю применять знания о данных (точно так же, как знание о линейном разделении в примере). Также оно позволит найти альтернативные решения проблемы.

Применение пакета HDTree


Этот раздел познакомит вас с основами HDTree. Я постараюсь коснуться некоторых частей его API. Пожалуйста, не стесняйтесь спрашивать в комментариях или свяжитесь со мной, если у вас есть какие-либо вопросы по этому поводу. С радостью отвечу и при необходимости дополню статью. Установка HDTree немного сложнее, чем pip install hdtree. Извините. Для начала нужен Python 3.5 или новее.

  • Создайте пустой каталог и внутри него папку с именем hdtree (your_folder/hdtree)
  • Клонируйте репозиторий в каталог hdtree (не в другой подкаталог).
  • Установите необходимые зависимости: numpy, pandas, graphviz, sklearn.
  • Добавьте your_folder в PYTHONPATH. Это включит директорию в механизм импорта Python. Вы сможете использовать его как обычный пакет Python.

В качестве альтернативы добавьте hdtree в папку site-packages вашей установки python. Я могу добавить установочный файл позже. На момент написания код недоступен в репозитории pip. Весь код, который генерируют графику и выходные данные ниже (а также ранее показанные), находятся в репозитории, а непосредственно размещены здесь. Решение линейной проблемы с помощью одноуровневого дерева

Давайте сразу начнем с кода:

from hdtree import HDTreeClassifier, SmallerThanSplit, EntropyMeasurehdtree_linear = HDTreeClassifier(allowed_splits=[SmallerThanSplit.build()], # Split rule in form a < b    information_measure=EntropyMeasure(), # Use Information Gain for the scores attribute_names=['x', 'y' ]) # give the    attributes some interpretable names # standard sklearn-like interface hdtree_linear.fit(X_street_train,    y_street_train) # create tree graph hdtree_linear.generate_dot_graph() 




Да, результирующее дерево имеет высоту только в один уровень и предлагает идеальное решение этой проблемы. Это искусственный пример, чтобы показать эффект. Тем не менее, я надеюсь, что он проясняет мысль: иметь интуитивное представление о данных или просто предоставлять дерево решений с различными вариантами разделения пространства признаков, которое может предложить более простое, а иногда даже более точное решение. Представьте, что вам нужно интерпретировать правила из представленных здесь деревьев, чтобы найти полезную информацию. Какую интерпретацию вы сможете понять первой, а какой больше доверяете? Сложная интерпретация, использующая многошаговые функции, или небольшое точное дерево? Думаю, ответ довольно прост. Но давайте немного углубимся в сам код. При инициализации HDTreeClassifier самое важное, что вы должны предоставить, это allowed_splits. Здесь вы предоставляете список, содержащий возможные правила разделения, которые алгоритм пробует во время обучения для каждого узла, чтобы найти хорошее локальное разделение данных. В этом случае мы предоставили исключительноSmallerThanSplit. Это разделение делает именно то, что вы видите: оно принимает два атрибута (пробует любую комбинацию) и разделяет данные по схеме a_i < a_j. Что (не слишком случайно) соответствует нашим данным настолько хорошо, насколько это возможно.

Этот тип разделения обозначается как многовариантное разделение Оно означает, что разделение использует более одного признака для принятия решения. Это не похоже на одновариантное разделение, которое используются в большинстве других деревьев, таких как scikit-tree (подробнее см. выше), которые принимают во внимание ровно один атрибут. Конечно, у HDTree также есть опции для достижения нормального разделения, как те, что есть в scikit-деревьях семейство QuantileSplit. Я покажу больше по ходу статьи. Другая незнакомая вещь, которую вы можете увидеть в коде гиперпараметр information_measure. Параметр представляет измерение, которое используется для оценки значения одного узла или полного разделения (родительского узла с его дочерними узлами). Выбранный вариант основан на энтропии [10]. Возможно, вы также слышали о коэффициенте Джини, который был бы еще одним допустимым вариантом. Конечно же, вы можете предоставить своё собственное измерение, просто реализовав соответствующий интерфейс. Если хотите, реализуйте gini-Index, который вы можете использовать в дереве, не реализовывая заново ничего другого. Просто скопируйте EntropyMeasure() и адаптируйте для себя. Давайте копнем глубже, в катастрофу Титаника. Я люблю учиться на собственных примерах. Сейчас вы увидите ещё несколько функций HDTree с конкретным примером, а не на сгенерированных данных.

Набор данных


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



Вы можете заметить, что там все виды атрибутов. Числовые, категориальные, целочисленные типы и даже пропущенные значения (посмотрите на столбец Cabin). Задача в том, чтобы спрогнозировать, выжил ли пассажир после катастрофы Титаника, по доступной информации о пассажире. Описание атрибутов-значений вы найдёте здесь. Изучая ML-учебники и применяя этот набор данных, вы выполняете все виды предварительной обработки, чтобы иметь возможность работать с обычными моделями машинного обучения, например, удаляя отсутствующие значения NaN путём замещения значений [12], отбрасывания строк/столбцов, унитарным кодированием [13] категориальных данных (например, Embarked и Sex или группировки данных, чтобы получить валидный набор данных, который принимает ML-модель. Такая очистка технически не требуется HDTree. Вы можете подавать данные как есть, и модель с радостью примет их. Измените данные только в том случае, когда проектируете реальные объекты. Я упростил всё для начала.

Тренировка первого HDTree на данных Титаника


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

    hdtree_titanic = HDTreeClassifier(allowed_splits=[FixedValueSplit.build(), # e.g., Embarked = 'C'    SingleCategorySplit.build(), # e.g., Embarked -> ['C', 'Q', 'S']    TwentyQuantileRangeSplit.build(), # e.g., IN Quantile 3-5    TwentyQuantileSplit.build()], # e.g., BELOW Quantile 7    information_measure=EntropyMeasure(),    attribute_names=col_names,    max_levels=3) # restrict to grow to a max of 3 levels    hdtree_titanic.fit(X_titanic_train.values, y_titanic_train.values)    hdtree_titanic.generate_dot_graph()    



Присмотримся к происходящему. Мы создали дерево решений, имеющее три уровня, которые выбрали для использования 3 из 4 возможных правил разделения SplitRules. Они помечены буквами S1, S2, S3. Я вкратце объясню, что они делают.

  • S1: FixedValueSplit. Это разделение работает с категориальными данными и выбирает одно из возможных значений. Затем данные разделяются на одну часть, имеющую это значение, и другую часть, для которой значение не установлено. Например, PClass = 1 и Pclass 1.
  • S2: (Двадцать) QuantileRangeSplit. Они работают с числовыми данными. Правила разделят соответствующий диапазон значений оцениваемого атрибута на фиксированное количество квантилей и интервалов, находящихся в пределах последовательных подмножеств. От квантиля 1 до квантиля 5 каждый включает одинаковое количество точек данных. Начальный квантиль и конечный квантиль (размер интервала) ищутся для оптимизации измерения информации (measure_information). Данные делятся на (i) имеющие значение в пределах этого интервала или (ii) вне его. Доступны разделения различного количества квантилей.
  • S3: (Двадцать) QuantileSplit. Подобно разделению диапазона (S2), но разделяет данные по пороговому значению. Это в основном то, что делают обычные деревья решений, за исключением того, что они обычно пробуют все возможные пороги вместо их фиксированного числа.

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

  • S4: SingleCategorySplit будет работать аналогично FixedValueSplit, но создаст дочерний узел для каждого возможного значения, например: для атрибута PClass это будет 3 дочерних узла (каждый для Class 1, Class 2 и Class 3). Обратите внимание, что FixedValueSplit идентичен SingleValueSplit, если есть только две возможные категории.

Индивидуальные разделения несколько умны по отношению к типам/значениям данных, которые принимают. До некоторого расширения они знают, при каких обстоятельствах они применяются и не применяются. Дерево также обучалось с разделением тренировочных и тестовых данных 2 к 1. Производительность 80,37% точности на тренировочных данных и 81,69 на тестовых. Не так уж и плохо.

Ограничение разделений


Предположим, что вы по какой-то причине не слишком довольны найденными решениями. Может быть, вы решите, что самое первое разделение на вершине дерева слишком тривиально (разделение по атрибуту sex). HDTree решает проблему. Самым простым решением было бы запретить FixedValueSplit (и, если уж на то пошло, эквивалентному SingleCategorySplit) появляться на вершине. Это довольно просто. Измените инициализацию разбиений вот так:

    - SNIP -    ...allowed_splits=[FixedValueSplit.build_with_restrictions(min_level=1),    SingleCategorySplit.build_with_restrictions(min_level=1),...],    - SNIP -

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



Запрещая разделению по признаку sex появляться в корне благодаря параметруmin_level=1 (подсказка: конечно же, вы также можете предоставить max_level), мы полностью реструктурировали дерево. Его производительность сейчас составляет 80,37% и 81,69% (тренировочные/тестовые). Она не менялась вообще, даже если мы взяли предположительно лучшее разделение в корневом узле.

Из-за того, что деревья решений строятся в жадной форме, они найдут только локальное _наилучшее разбиение для каждого узла, что не обязательно является _ лучшим _ вариантом вообще. На самом деле нахождение идеального решения проблемы дерева решений NP-полная задача, это доказано в [15].
Так что лучшее, чего мы можем желать, это эвристики. Вернёмся к примеру: обратите внимание, что мы уже получили нетривиальное представление данных? Хотя это тривиально. сказать, что мужчины будут иметь только низкие шансы на выживание, в меньшей степени может иметь место вывод, что, будучи человеком в первом или втором классе PClass вылет из Шербура (Embarked=C) Может увеличить ваши шансы на выживание. Или что если вы мужчина изPClass3 и вам меньше 33 лет, ваши шансы тоже увеличиваются? Помните: прежде всего женщина и дети. Хорошее упражнение сделать эти выводы самостоятельно, интерпретируя визуализацию. Эти выводы были возможны только благодаря ограничению дерева. Кто знает, что еще можно раскрыть, применив другие ограничения? Попробуйте!

Как последний пример такого рода я хочу показать вам, как ограничить разбиение конкретными атрибутами. Это применимо не только для предотвращения обучения дерева на нежелательных корреляциях или принудительных альтернативных решений, но также сужает пространство поиска. Подход может резко сократить время выполнения, особенно при использовании многовариантного разделения. Если вы вернётесь к предыдущему примеру, то можете обнаружить узел, который проверяет наличие атрибута PassengerId. Возможно, мы не хотим его моделировать, поскольку он, по крайней мере, не должен вносить вклад в информацию о выживании. Проверка на идентификатор пассажира может быть признаком переобучения. Давайте изменим ситуацию с помощью параметра blacklist_attribute_indices.

    - SNIP -    ...allowed_splits=[TwentyQuantileRangeSplit.build_with_restrictions(blacklist_attribute_indices=['PassengerId']),    FixedValueSplit.build_with_restrictions(blacklist_attribute_indices=['Name Length']),    ...],    - SNIP -    



Вы можете спросить, почемуname length вообще появляется. Нужно учитывать, что длинные имена (двойные имена или [благородные] титулы) могут указывать на богатое прошлое, увеличивая ваши шансы на выживание.
Дополнительная подсказка: вы всегда можете добавить то жеSplitRule дважды. Если вы хотите внести в черный список атрибут только для определенных уровней HDTree, просто добавьте SplitRule без ограничения уровня.

Прогнозирование точек данных


Как вы, возможно, уже заметили, для прогнозирования можно использовать общий интерфейс scikit-learn. Это predict(), predict_proba(), а такжеscore(). Но можно пойти дальше. Есть explain_decision(), которая выведет текстовое представление решения.

print(hdtree_titanic_3.explain_decision(X_titanic_train[42]))

Предполагается, что это последнее изменение в дереве. Код выведет это:

Query:Query:  {'PassengerId': 273, 'Pclass': 2, 'Sex': 'female', 'Age': 41.0, 'SibSp': 0, 'Parch': 1, 'Fare': 19.5, 'Cabin': nan, 'Embarked': 'S', 'Name Length': 41}Predicted sample as "Survived" because of: Explanation 1:Step 1: Sex doesn't match value maleStep 2: Pclass doesn't match value 3Step 3: Fare is OUTSIDE range [134.61, ..., 152.31[(19.50 is below range)Step 4: Leaf. Vote for {'Survived'}    

Это работает даже для отсутствующих данных. Давайте установим индекс атрибута 2 (Sex) на отсутствующий (None):

    passenger_42 = X_titanic_train[42].copy()    passenger_42[2] = None    print(hdtree_titanic_3.explain_decision(passenger_42))    

Query:  {'PassengerId': 273, 'Pclass': 2, 'Sex': None, 'Age': 41.0, 'SibSp': 0, 'Parch': 1, 'Fare': 19.5, 'Cabin': nan, 'Embarked': 'S', 'Name Length': 41}Predicted sample as "Death" because of: Explanation 1:Step 1: Sex has no value availableStep 2: Age is OUTSIDE range [28.00, ..., 31.00[(41.00 is above range)Step 3: Age is OUTSIDE range [18.00, ..., 25.00[(41.00 is above range)Step 4: Leaf. Vote for {'Death'}---------------------------------Explanation 2:Step 1: Sex has no value availableStep 2: Pclass doesn't match value 3Step 3: Fare is OUTSIDE range [134.61, ..., 152.31[(19.50 is below range)Step 4: Leaf. Vote for {'Survived'}---------------------------------    

Это напечатает все пути решения (их больше одного, потому что на некоторых узлах решение не может быть принято!). Конечным результатом будет самый распространенный класс среди всех листьев.

другие полезные вещи


Вы можете продолжить и получить представление дерева в виде текста:

    Level 0, ROOT: Node having 596 samples and 2 children with split rule "Split on Sex equals male" (Split Score:    0.251)    -Level 1, Child #1: Node having 390 samples and 2 children with split rule "Age is within range [28.00, ..., 31.00["    (Split Score: 0.342)    --Level 2, Child #1: Node having 117 samples and 2 children with split rule "Name Length is within range [18.80,    ..., 20.00[" (Split Score: 0.543)    ---Level 3, Child #1: Node having 14 samples and no children with    - SNIP -    

Или получить доступ ко всем чистым узлам (с высоким баллом):

    [str(node) for node in hdtree_titanic_3.get_clean_nodes(min_score=0.5)]    

    ['Node having 117 samples and 2 children with split rule "Name Length is within range [18.80, ..., 20.00[" (Split    Score: 0.543)',    'Node having 14 samples and no children with split rule "no split rule" (Node Score: 1)',    'Node having 15 samples and no children with split rule "no split rule" (Node Score: 0.647)',    'Node having 107 samples and 2 children with split rule "Fare is within range [134.61, ..., 152.31[" (Split Score:    0.822)',    'Node having 102 samples and no children with split rule "no split rule" (Node Score: 0.861)']    

Расширение HDTree


Самое значимое, что вы, возможно, захотите добавить в систему это ваше собственноеSplitRule. Правило разделения действительно может делать для разделения все, что хочет Реализуйте SplitRule через реализацию AbstractSplitRule. Это довольно сложно, поскольку вам придется самостоятельно обрабатывать прием данных, оценку производительности и все такое. По этим причинам в пакете есть миксины, которые вы можете добавить в реализацию в зависимости от типа разделения. Миксины делают большую часть трудной части за вас.


image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:



Подробнее..

Перевод 10 контринтуитивных выводов после 10 лет проведения DevOpsDays

14.07.2020 12:05:49 | Автор: admin
image

Ветеран DevOps Крис Байтаерт, стоявший у истоков DevOpsDays, делится своим опытом, и его выводы вас удивят.

Десять лет назад мы внезапно отправились в путешествие. Мы собрали нескольких наших хороших друзей в Генте (Бельгия), чтобы обсудить Agile, open-source и первый опыт работы с облачными технологиями. В 2009 году Джон Оллспоу и Пол Хаммонд выступили на Velocity с докладом 10+ развертываний в день: сотрудничество dev и ops в Flickr (и запись этого доклада стоит посмотреть). Увидев это выступление, Патрик Дебуа решил основать DevOpsDays.

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

1. Нет такого понятия, как DevOps-инженер


Во многих командах есть человек с должностью DevOps-инженер, и далеко не всем специалистам нравится такое звание. Такое название профессии создает ложное впечатление, что DevOps это работа, которую может выполнить один человек. Чаще всего, инженер DevOps это Linux-инженер, который, если повезет, может решать задачи автоматизации. Когда рекрутеры начинают искать DevOps-инженера, соискатели должны задать себе правильные вопросы: Что на самом деле нужно компании от соискателя? Они ищут инженера для сборке? Сеньора, который понимает нефункциональные требования? Специалиста в отдел операций, способного заниматься автоматизаций или кого-то еще? Чаще всего компании ищут специалиста, который отвлечет остальных сотрудников от невыполнения практических принципов и требований Agile.

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

2. DevOps-команд не существует


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

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

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

3. DevOps-проектов не бывает


Все проекты конечны. Вы занимаетесь разработкой, разворачиваете свое решение и двигаетесь дальше. Также последние 10 лет идут разговоры о том, что DevOps это постоянное совершенствование, а постоянное совершенствование бесконечно. В свою очередь, результатом ваших проектов являются долгоиграющие сервисы, а сервис подразумевает последовательность Разработка -> Развертывание -> Поддержка работоспособности

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

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

4. DevOps-инструментов не существует


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

Культура, основанная на инструментах может скорее изолировать людей вместо того, чтобы помочь им взаимодействовать. Дело в том, что люди становятся одержимы своим тулчейном и отдаляются от тех, кто им не пользуется. Несмотря на то, что те или иные инструменты могут быть очень полезны с технической точки зрения, ряд новых инструментов (условно относимых к DevOps) увеличил раскол между различными группами. Например, я часто слышу фразу это работает в моем контейнере. Разработчики используют эту фразу, чтобы обозначить, что их работа выполнена. Контейнеры сами по себе не решают проблем взаимодействия, связанных с эффективным запуском приложений. Мы не можем позволить инструментам отдалить нас друг от друга.

5. В DevOps не бывает сертификации


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

К сожалению, команды менеджеров требуют сертификаты в области, в которой трудно что-то сертифицировать. Будьте образованы в области своего любимого программного и аппаратного обеспечения, изучите облачные технологии. Выучитесь в местном университете, читайте книги, из которых вы многое почерпнете, в частности, книги Деминга, Форсгрен, Хамбла и многие другие. Но не надейтесь, что станете лучшим в DevOps после получения сертификата. Взаимодействовать с коллегами намного важнее.

6. DevOps-конвейера не существует


DevOps уже отработал?" DevOps-конвейер работает. DevOps-конвейер сломан. Всякий раз, когда я слышу эти заявления, я удивляюсь, что мы пришли к подобной терминологии. Мы сделали ребрендинг конвейера развертывания, или дело в том, что в некоторых компаниях DevOps-команды занимаются этой инфраструктурой? А может дело в том, что разработчики звонят операционной команде, если конвейер сломан?

Несмотря на огромную важность технологий CI/CD, я скептически отношусь к использованию термина DevOps-конвейер. Если конвейер разработки ломается, то в этом виновата операционная команда. Разработчики не задумываются о работе конвейера, покуда они пишут тесты. Также в заблуждение вводит сама концепция. Конвейеры создаются для каждого сервиса или приложения отдельно, а не в рамках всей области DevOps. Создавая обобщенные конвейеры мы рискуем увеличить разрыв между командами, а это совсем не та целью, которую преследует DevOps.

Я рекомендую пользоваться методикой, которую я видел в сотнях организаций по всему миру: называть каждый отдельный конвейер конвейером для приложения X. С такой терминологией будет проще узнать, с каким приложением возникают проблемы при тестировании, развертывании или обновлении. Также мы будем знать какая команда будет работать над исправлениями в приложении X (возможно, с помощью друзей из операционной команды).

7. В DevOps нет стандартов


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

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

DevOps стоит понимать как совокупность практик, подобную методологии ITIL. Помните, что буква L в ITIL означает Library (Библиотека). И эту библиотеку нужно воспринимать не как руководство к действию, а как перечень лучших практик, из которого нужно выбрать самые применимые для вас. ITIL возненавидели именно из-за неудачных реализаций, в которых библиотеку использовали именно как пошаговую инструкцию. Стандартизация в DevOps приведет к таким же результатам.

8. Нет такого понятия, как DevSecOps


Мы начали проводить DevOpsDays в 2009, и эта конференция была открыта для всех. Конечно, изначально это было мероприятие для разработчиков и сотрудников операционных команд, но к нам приходили все: администраторы баз данных, тестировщики, бизнес-аналитики, финансисты, и, конечно, специалисты в области безопасности. Еще в 2012 году мы выступали на встречах OWASP, рассказывая о том, что мы сделали. Мы шутили, что буква S в DevOps означает безопасность, как и буква S в HTTPS.

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

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

9. Нельзя взять и перейти на DevOps


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

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

10. Есть такая штука, как Дев-уупс


К сожалению, многие люди не понимают всей важности сотрудничества. Они строят стены между командами, считают, что инструменты важнее практик, требуют сертификации всего и вся. Также они считают, что все 9 предыдущих утверждений неверны. И эти люди будут вечно мучиться, чтобы преуспеть в том, что я называю Дев-уупс.

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

Главная цель


Мы проводим DevOpsDays уже 10 лет, и за это время тысячи людей узнали друг от друга много интересного в легкой и открытой обстановке. Некоторые концепции, которые я нахожу противоречащими целям DevOps и agile, популярны. Сосредоточьтесь на том, чтобы ваши услуги помогали вашей компании, и не прекращайте процесс обучения. И речь не о копировании инструментов и внедрении их в своей организации. Речь о концентрации на постоянном совершенствовании во всех отношениях.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Полезное


Подробнее..

Перевод Какой совет оказал наибольшее влияние на вашу карьеру в DevOps

15.07.2020 12:10:08 | Автор: admin
Взгляните на практики, принципы и модели, которые повлияли на карьеры ведущих специалистов в DevOps, и поделитесь своей собственной мудростью.

image


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

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

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

Чтобы узнать, что повлияло на моих коллег, я попросил членов DevOps-команды OpenSource.com поделиться своими мыслями по этому вопросу:

Какая из концепций DevOps (практика, принцип или модель) изменила вашу карьеру?


image

Алекс Бунарджич


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

Воплощение в жизнь шквала быстрых и неистовых отказов лучшее, что случилось в моей карьере. Фрустрация сменилась ощущением полета. Это привело к массовому принятию/внедрению практик TDD [test-driven development разработка на основе тестирования] и к осознанию того, что TDD это не test, а DRIVING!

image

Кэтрин Луи


Культурный хакинг. Я понятия не имела, что существует название метода, который я (как партизан) использовала, чтобы изменить корпоративную культуру, но потом я увидела видео Себа Паке Ignite Montreal и порадовалась, что этим занимаюсь не только я.

image

Клемент Верна


Постоянное улучшение. До тех пор, пока меня не познакомили с идеями непрерывного совершенствования, я не искал путей развития ни в своей работе, ни в карьере. Постоянное совершенствование заставило меня осознать, что именно зависит от меня. Я понял, что смогу бросить вызов самому себе, узнав что-то новое и выбравшись из своей зоны комфорта. Это привело к тому, что я начал вносить свой вклад в проект с открытым исходным кодом (Fedora), а затем начал работать в Red Hat. Это определенно изменило мою карьеру.

image

Джейсон Хиббетс


Все началось с The Lean Startup на моем первом саммите Code for America Summit. Я отчетливо помню поворотный момент в моей карьере в 2012 году. Эрик Рис, автор The Lean Startup и член совета директоров Code for America", был на сцене вместе с Тимом О'Райли. Они говорили о взломе кода, а также о культуре и неудачах при проверке знаний. Моим самым большим достижением было знакомство с The Lean Startup. Я скачал книгу и прочитал большую ее часть во время полета домой. Она изменила мой подход к работе и к руководству командой.

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

image

Вилли-Питер Шауб


Во время двухмесячного академического отпуска в 2018 году меня осенило, что страх неудачи отбирает у меня энергию и страсть к разработке ПО, а я любил эту карьеру. Я понял, что ошибки это не трагедия, а инструмент для инноваций, сотрудничества и непрерывного обучения, который подпитывает DevOps. И это осознание стало ключевым моментом в моей карьере. Прозрачность сотрудничества, прогрессивное воздействие, развитие, основанное на гипотезах и тестах, а также методы CD все эти практики, создают возможности как можно скорее добиться отказа, провести проверки и адаптировать решения, над которыми мы работаем (и свою карьеру).

Ваша очередь


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

Какая концепция из DevOps оказала наибольшее влияние на вашу карьеру?

Пожалуйста, поделитесь своими мыслями в комментариях.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Полезное


Подробнее..

Перевод 10 open source альтернатив Google Photos

16.07.2020 12:18:27 | Автор: admin
image

Вам кажется, что вы тонете в цифровых фотографиях? Такое ощущение, что телефон сам по себе заполняется вашими селфи и снимками, а вот выбор лучших кадров и систематизация фотографий никогда не происходит без вашего вмешательства. Для упорядочивания созданных вами воспоминаний требуется время, но ведь со структурированными фотоальбомами так приятно иметь дело. В операционной системе вашего телефона наверняка имеется сервис для хранения и сортировки фотографий, однако существует добрая доля проблем конфиденциальности вокруг сознательного предоставления копий фотографий вашей жизни, друзей, детей и отдыха корпорациям (ещё и бесплатно). К счастью, существует большой выбор альтернатив с открытым исходным кодом, в которых вы сами выбираете, кто может просматривать ваши фотографии, а также инструменты с открытым кодом, которые помогут вам найти и улучшить самые лучшие из ваших любимых фото.

Nextcloud


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

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

Piwigo


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

Просмотр изображений


Хранение фотографий это только половина дела. Совсем другое это придача им смысла, а для этого вам нужен хороший набор open source инструментов. И лучший инструмент во многом зависит от того, что вам действительно нужно. Почти каждый является фотографом-любителем, даже если себя так не воспринимает, а некоторые даже зарабатывают этим на жизнь. Здесь каждый найдет что-то по своему вкусу, и как минимум вам потребуется приятный и эффективный способ просматривать свою фотогалерею.

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

  • Eye of GNOME встроенная программа просмотра изображений со многими дистрибутивами Linux отлично справляется с отображением картинок в самых распространенных форматах.
  • ImageGlass это ещё одна базовая программа просмотра изображений с открытым исходным кодом, которая выигрывает по скорости и простоте, и является отличным выбором для пользователей Windows.
  • PhotoQt программа для просмотра изображений для Windows или Linux, написанная на Qt, предназначена быть быстрой и гибкой с возможностью кэша миниатюр, комбинации клавиш и мышки и поддержкой многих форматов.


Организация каталога фотоизображений


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

  • Shotwell это программа для организации каталога изображений, которая по умолчанию установлена во многих дистрибутивах GNOME. Она содержит основные функции редактирования обрезание, уменьшение эффекта красных глаз и настройка уровней цветов, а также автоматическое структурирование по дате и пометкам.
  • Gwenview программа для просмотра изображений для KDE. С её помощью вы можете просматривать каталоги фотографий, сортировать их, удалять ненужные вам и производить основные операции типа изменение размера, обрезание, поворот и уменьшение эффекта красных глаз.
  • DigiKam программа для организации изображений, является частью семьи KDE, поддерживает сотни различных форматов, имеет несколько методов по организации коллекций и поддерживает пользовательские плагины для расширения функционала. Из всех перечисленных здесь альтернатив, вероятно именно эта будет проще всего работать на Windows в дополнение к её родному Linux.
  • Lightzone бесплатное программное обеспечение с открытым исходным кодом для редактирования и управления фотографиями. Это приложение Java, поэтому доступно на любой платформе, на которой работает Java (Linux, MacOS, Windows, BSD и другие).
  • Darktable фотостудия, цифровая темная комната и менеджер фотографий в одном. Вы можете непосредственно привязать к ней свою камеру или же синхронизировать изображения, сортировать их по наиболее понравившимся, улучшать фотографии динамичными фильтрами и экспортировать результат. Относится к приложениям для профессионалов и может не зайти любителю, но если вам нравится обдумывать диафрагмы и выдержки или дискутировать на тему Tri-X зерна, Darktable отлично вам подойдет.


Расскажите про себя? Пользовались ли вы Google Photos и ищите ли новый способ управления своими фотографиями? Или вы уже перешли к чему-то более новому, и, надеемся, с открытым кодом? Разумеется, мы перечислили не все варианты, поэтому расскажите нам про свои любимые ниже в комментариях.

image


Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:


Полезное


Подробнее..

Перевод DevOps vs Agile В чем разница

13.07.2020 12:11:27 | Автор: admin
Разница в том, что происходит после разработки

image
Когда ПО только начали разрабатывать, процесс разработки не подходил ни под один вид управления. Затем появился водопад, который ввел идею о том, что разработка ПО может быть определена временем создания или сборки приложения.

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

Водопадные проекты были связаны с моделью тройного ограничения, которую еще называют треугольником управления проектами. Каждая сторона треугольника представляет собой одно из ограничений управления проектами: масштаб, время и стоимость. Как пишет Анджело Беретта, модель тройного ограничения утверждает, что стоимость является функцией времени и объема, а эти три фактора связаны определенным и предсказуемым образом Если мы хотим сократить сроки выполнения плана (время), мы должны увеличить стоимость. Модель также подразумевает, что если мы хотим увеличить объем, то должны увеличить стоимость или сроки выполнения.

Переход от водопада к Agile


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

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

Agile подразумевает другой подход, который отходит от планирования всего проекта, привязки к предполагаемым датам и отчетам. Гибкая методология предполагает неопределенность и учитывает ее. Она призывает реагировать на изменения вместо того, чтобы их игнорировать. Изменения рассматриваются как способ удовлетворения потребностей клиента.

Ценности Agile


Agile регулируется Agile манифестом. Вот его 12 принципов:

  1. Наивысшим приоритетом является удовлетворение потребностей клиента.
  2. Изменение требований приветствуется, даже на поздних стадиях разработки.
  3. Работающий продукт следует выпускать как можно чаще.
  4. Разработчики и представители бизнеса должны работать вместе.
  5. Над проектом должны работать мотивированные профессионалы.
  6. Общение вживую является наиболее практичным и эффективным способом обмена информацией.
  7. Работающий продукт основной показатель прогресса.
  8. Agile процессы содействуют устойчивому развитию.
  9. Важно уделять внимание техническому совершенству и хорошему дизайну.
  10. Простота необходима.
  11. Лучшие архитектурные решения, требования и идеи дизайна появляются у самоорганизующихся команд.
  12. Регулярно рефлексируйте на тему способов улучшения эффективности и корректируйте стиль своей работы.

4 основные идеи Agile:

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

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

Разработка ПО по Agile


Разработка ПО по Agile требует адаптивного планирования, эволюционной разработки и доставки конечного продукта. Многие методологии, структуры и практики разработки ПО относятся к категории гибких, в том числе:

  • Scrum
  • Kanban (визуальный рабочий процесс)
  • XP (экстремальное программирование)
  • Lean
  • DevOps
  • FDD (разработка с акцентом на фичи)
  • TDD (разработка с акцентом на тестировании)
  • Crystal
  • DSDM (Метод разработки динамических систем)
  • ASD (Адаптивная разработка программного обеспечения)

Все они используются сами по себе или в сочетании с другими методологиями для разработки и развертывания ПО. Наиболее распространенными являются Scrum, Kanban (или комбинация, называемая Scrumban) и DevOps.

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

Kanban это фреймворк Agile, который еще иногда называют системой управления рабочим процессом. Он помогает команде визуализировать свою работу и увеличить эффективность (оставаясь при этом гибкой методологией). Kanban обычно представляет собой цифровую или физическую доску. Задачи команды перемещаются по доске в зависимости от стадии: задача еще не начиналась, в процессе, тестируется, окончена. Kanban позволяет каждому члену команды видеть состояние задач.

Ценности DevOps


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

DevOps основан на двух других областях: Lean и Agile. DevOps это не название и не роль в компании. На самом деле это обязательство, которое организация или команда берет на себя в отношении непрерывной доставки продукта, его развертывания и интеграции. По словам Джин Ким, автора проектов The Phoenix и The Unicorn Project, существует три пути, которые определяют принципы DevOps:

  • принципы потока,
  • принципы фидбэка,
  • принципы бесконечного обучения.

Разработка ПО по DevOps


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

Когда вы думаете об автоматизации, облаке, микросервисах, вы думаете о DevOps.
Николь Форсгрен, Джез Хамбл и Джин Ким написали книгу Ускоряйся! Как создавать и масштабировать высокопроизводительные организации. В одном из интервью они объяснили что же такое DevOps:

  • Эффективность поставки ПО имеет значение. Она оказывает существенное влияние на прибыльность, долю рынка, качество, удовлетворенность клиентов, достижение целей организации и миссии.
  • Компании с высокой эффективностью достигают высокой скорости разработки, стабильности, качества. Им не приходится ничем жертвовать, чтобы достичь всего этого.
  • Вы можете улучшить свою эффективность, внедряя принципы DevOps и практики из Lean, Agile.
  • Реализация этих практик и возможностей также влияет на вашу организационную культуру. Она, в свою очередь, влияет как на эффективность вашего ПО, так и на производительность организации.
  • Требуется много работать, чтобы понять как улучшить эффективность.

DevOps и Agile


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

Сходства

  • И то, и другое это методологии разработки ПО, с этим не поспоришь.
  • Agile существует уже более 20 лет, DevOps тоже появилась относительно недавно.
  • Оба подхода верят в быструю разработку ПО. Их принципы основаны на том, как быстро разрабатывать ПО, не причиняя вреда клиенту или операциям.

Различия

  • Разница в том, что происходит после разработки.

    • Разработка, тестирование и развертывание ПО происходят как в DevOps, так и в Agile. Тем не менее, чистый Agile подразумевает, что процесс останавливается после этих трех этапов. DevOps, в свою очередь, включает в себя операции, которые происходят постоянно. Поэтому мониторинг и разработка ПО продолжаются и после получения заказчиком готового продукта.
  • В Agile разные люди отвечают за разработку, тестирование и развертывание ПО. В DevOps человек, исполняющий роль инженера DevOps отвечает за все. Разработка это операции, а операции это разработка.
  • DevOps больше ассоциируется с сокращением затрат, а Agile с бережливой разработкой и сокращением излишних трат. Также Agile поддерживает идею MVP (минимального жизнеспособного продукта) и учет гибких проектов.
  • Agile про эмпирический подход адаптация, прозрачность и проверка вместо приблизительного прогноза.

Agile DevOps
Фидбэк от заказчика Фидбэк от себя
Меньше циклы релизов Меньше циклы релизов, моментальный фидбэк
Ставка на скорость Ставка на скорость и автоматизацию
Не лучшее решение для бизнеса Лучшее решение для бизнеса

Заключение


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

Я работала по Agile и из своего опыта могу сказать, что командам и организациям очень важно понимать, что из себя представляют DevOps и Agile. Нужно также понимать каким образом они помогают командам работать быстрее и эффективнее, обеспечивать качество продукта и повышать удовлетворенность клиентов.

Agile и DevOps ни в коем случае не соперники друг другу (по крайней мере поводов пока нет). Они скорее союзники, чем враги на поле гибких методологий. Agile и DevOps могут работать эксклюзивно и инклюзивно, что позволяет им существовать в одном пространстве.

Перевод: Диана Шеремьёва

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Полезное


Подробнее..

Перевод Объясняем p-значения для начинающих Data Scientistов

13.07.2020 12:11:27 | Автор: admin
Я помню, когда я проходил свою первую зарубежную стажировку в CERN в качестве практиканта, большинство людей все еще говорили об открытии бозона Хиггса после подтверждения того, что он соответствует порогу пять сигм (что означает наличие p-значения 0,0000003).

image


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

Я пошел, чтобы гуглить слово p-значение, и то, что я нашел в Википедии, заставило меня еще больше запутаться

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


Хорошая работа Википедия.

Ладно. Я не понял, что на самом деле означает р-значение.

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

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

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

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

  1. Проверка гипотезы
  2. Нормальное распределение
  3. Что такое P-значение?
  4. Статистическая значимость


Это будет весело.

Давайте начнем!

1. Проверка гипотез


image

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

Наша конечная цель определить статистическую значимость наших результатов.

И статистическая значимость построена на этих 3 простых идеях:

  • Проверка гипотезы
  • Нормальное распределение
  • P-значение


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

Другими словами, мы создадим утверждение (нулевая гипотеза) и используем пример данных, чтобы проверить, является ли утверждение действительным. Если утверждение не соответствует действительности, мы выберем альтернативную гипотезу. Все очень просто.

Чтобы узнать, является ли утверждение обоснованным или нет, мы будем использовать p-значение для взвешивания силы доказательств, чтобы увидеть, является ли оно статистически значимым. Если доказательства подтверждают альтернативную гипотезу, то мы отвергнем нулевую гипотезу и примем альтернативную гипотезу. Это будет объяснено в следующем разделе.

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

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

  • Нулевая гипотеза среднее время доставки составляет 30 минут или меньше
  • Альтернативная гипотеза среднее время доставки превышает 30 минут
  • Цель здесь состоит в том, чтобы определить, какое утверждение нулевое или альтернативное лучше подтверждается данными, полученными из наших выборочных данных.


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

Одним из распространенных способов проверки гипотез является использование Z-критерия. Здесь мы не будем вдаваться в подробности, так как хотим лучше понять, что происходит на поверхности, прежде чем погрузиться глубже.

2. Нормальное распределение


image

Нормальное распределение это функция плотности вероятности, используемая для просмотра распределения данных.

Нормальное распределение имеет два параметра среднее () и стандартное отклонение, также называемое сигма ().

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

Нормальное распределение обычно связано с правилом 68-95-99.7 (изображение выше).

  • 68% данных находятся в пределах 1 стандартного отклонения () от среднего значения ()
  • 95% данных находятся в пределах 2 стандартных отклонений () от среднего значения ()
  • 99,7% данных находятся в пределах 3 стандартных отклонений () от среднего значения ()


Помните порог пять сигм для открытия бозона Хиггса, о котором я говорил в начале? 5 сигм это около 99,99999426696856% данных, которые должны быть попасть до того, как ученые подтвердили открытие бозона Хиггса. Это был строгий порог, установленный, чтобы избежать любых возможных ложных сигналов.

Классно. Теперь вы можете задаться вопросом: Как нормальное распределение относится к нашей предыдущей проверке гипотез?

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

image

Обратите внимание, что когда мы рассчитали все Z-баллы для каждого времени доставки пиццы и построили стандартную кривую нормального распределения, как показано ниже, единица измерения на оси X изменится с минут на единицу стандартного отклонения, так как мы стандартизировали переменную, вычитая среднее и деля его на стандартное отклонение (см. формулу выше).

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

image

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

Мне нравится, как Уилл Кёрсен выразился: чем выше или ниже Z-показатель, тем менее вероятным будет случайный результат и тем более вероятным будет значимый результат.

Но насколько высокий (или низкий) показатель считается достаточно убедительным, чтобы количественно оценить, насколько значимы наши результаты?


Кульминация


Здесь нам нужен последний элемент для решения головоломки p-значение, и проверить, являются ли наши результаты статистически значимыми на основе уровня значимости (также известного как альфа), который мы установили перед началом нашего эксперимента.

3. Что такое P-значение?




Наконец Здесь мы говорим о р-значение!

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

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

Вместо того чтобы объяснять p-значения, используя определение, данное Википедией (извини Википедия), давайте объясним это в нашем контексте время доставки пиццы!

Напомним, что мы произвольно отобрали некоторые сроки доставки пиццы, и цель состоит в том, чтобы проверить, превышает ли время доставки 30 минут. Если окончательные доказательства подтверждают утверждение пиццерии (среднее время доставки составляет 30 минут или меньше), то мы не будем отвергать нулевую гипотезу. В противном случае мы опровергаем нулевую гипотезу.

Поэтому задача p-значения ответить на этот вопрос:

Если я живу в мире, где время доставки пиццы составляет 30 минут или меньше (нулевая гипотеза верна), насколько неожиданными являются мои доказательства в реальной жизни?


Р-значение отвечает на этот вопрос числом вероятностью.

Чем ниже значение p, тем более неожиданными являются доказательства, тем более нелепой выглядит наша нулевая гипотеза.

И что мы делаем, когда чувствуем себя нелепо с нашей нулевой гипотезой? Мы отвергаем ее и выбираем нашу альтернативную гипотезу.

Если р-значение ниже заданного уровня значимости (люди называют его альфа, я называю это порогом нелепости не спрашивайте, почему, мне просто легче понять), тогда мы отвергаем нулевую гипотеза.

Теперь мы понимаем, что означает p-значение. Давайте применим это в нашем случае.

P-значение в расчете времени доставки пиццы


Теперь, когда мы собрали несколько выборочных данных о времени доставки, мы выполнили расчет и обнаружили, что среднее время доставки больше на 10 минут с p-значением 0,03.

Это означает, что в мире, где время доставки пиццы составляет 30 минут или меньше (нулевая гипотеза верна), есть 3% шанс, что мы увидим, что среднее время доставки, по крайней мере, на 10 минут больше, из-за случайного шума.

Чем меньше p-значение, тем более значимым будет результат, потому что он с меньшей вероятностью будет вызван шумом.

В нашем случае большинство людей неправильно понимают р-значение:

Р-значение 0,03 означает, что есть 3% (вероятность в процентах), что результат обусловлен случайностью что не соответствует действительности.


Люди часто хотят получить определенный ответ (в том числе и я), и именно поэтому я долго путался с интерпретацией p-значений.

Р-значение ничего не *доказывает*. Это просто способ использовать неожиданность в качестве основы для принятия разумного решения.
Кэсси Козырков


Вот как мы можем использовать p-значение 0,03, чтобы помочь нам принять разумное решение (ВАЖНО):

  • Представьте, что мы живем в мире, где среднее время доставки всегда составляет 30 минут или меньше потому что мы верим в пиццерию (наше первоначальное убеждение)!
  • После анализа времени доставки собранных образцов р-значение на 0,03 ниже, чем уровень значимости 0,05 (предположим, что мы установили это значение перед нашим экспериментом), и мы можем сказать, что результат является статистически значимым.
  • Поскольку мы всегда верили пиццерии, что она может выполнить свое обещание доставить пиццу за 30 минут или меньше, нам теперь нужно подумать, имеет ли это убеждение смысл, поскольку результат говорит нам о том, что пиццерия не выполняет свое обещание и результат является статистически значимым.
  • Так что же нам делать? Сначала мы пытаемся придумать любой возможный способ сделать наше первоначальное убеждение (нулевая гипотеза) верным. Но поскольку пиццерия постепенно получает плохие отзывы от других людей и часто приводит плохие оправдания, которые привели к задержке доставки, даже мы сами чувствуем себя нелепо, чтобы оправдать пиццерию, и, следовательно, мы решаем отвергнуть нулевую гипотезу.
  • Наконец, следующее разумное решение не покупать больше пиццы в этом месте.


К настоящему времени вы, возможно, уже что-то поняли В зависимости от нашего контекста, p-значения не используются, чтобы что-либо доказать или оправдать.

По моему мнению, p-значения используются в качестве инструмента для оспаривания нашего первоначального убеждения (нулевая гипотеза), когда результат является статистически значимым. В тот момент, когда мы чувствуем себя нелепо с нашим собственным убеждением (при условии, что р-значение показывает, что результат статистически значим), мы отбрасываем наше первоначальное убеждение (отвергаем нулевую гипотезу) и принимаем разумное решение.

4. Статистическая значимость


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

Недостаточно иметь только р-значение, нам нужно установить порог (уровень значимости альфа). Альфа всегда должна быть установлена перед экспериментом, чтобы избежать смещения. Если наблюдаемое р-значение ниже, чем альфа, то мы заключаем, что результат является статистически значимым.

Основное правило установить альфа равным 0,05 или 0,01 (опять же, значение зависит от вашей задачи).

Как упоминалось ранее, предположим, что мы установили альфа равным 0,05, прежде чем мы начали эксперимент, полученный результат является статистически значимым, поскольку р-значение 0,03 ниже, чем альфа.

Для справки ниже приведены основные этапы всего эксперимента:

  1. Сформулируйте нулевую гипотезу
  2. Сформулируйте альтернативную гипотезу
  3. Определите значение альфа для использования
  4. Найдите Z-показатель, связанный с вашим альфа-уровнем
  5. Найдите тестовую статистику, используя эту формулу
  6. Если значение тестовой статистики меньше Z-показателя альфа-уровня (или p-значение меньше альфа-значения), отклоните нулевую гипотезу. В противном случае не отвергайте нулевую гипотезу.


image

Если вы хотите узнать больше о статистической значимости, не стесняйтесь посмотреть эту статью Объяснение статистической значимости, написанная Уиллом Керсеном.

Последующие размышления


Здесь много чего нужно переваривать, не так ли?

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

Но не слишком полагайтесь на p-значения, поскольку они помогают только в небольшой части всего процесса принятия решений.

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

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

Если вы хотите узнать больше о статистике, я настоятельно рекомендую вам прочитать эту книгу (которую я сейчас читаю!) Практическая статистика для специалистов по данным, специально написанная для data scientists, чтобы разобраться с фундаментальными концепциями статистики.

image


Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Recovery mode Быстрый старт и низкий потолок. Что ждет молодых Data Science-специалистов на рынке труда

03.08.2020 12:13:23 | Автор: admin
По исследованиям HeadHunter и Mail.ru спрос на специалистов в области Data Science превышает предложение, но даже так молодым специалистам не всегда удается найти работу. Рассказываем, чего не хватает выпускникам курсов и где учиться тем, кто планирует большую карьеру в Data Science.

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

Эмиль Магеррамов руководит группой сервисов вычислительной химии в компании biocad и на собеседованиях сталкивается с тем, что у кандидатов нет системного понимания профессии. Они заканчивают курсы, приходят с хорошо прокачанными Python и SQL, могут за 2 секунды поднять Hadoop или Spark, выполнить задачу по четкому ТЗ. Но при этом шаг в сторону уже нет. Хотя именно гибкости решений работодатели ждут от своих специалистов в области Data Science.

Что происходит на рынке Data Science



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

По исследованию HeadHunter и Mail.ru, специалисты по анализу данных одни из самых востребованных на рынке:

  • В 2019 году вакансий в области анализа данных стало больше в 9,6 раза, а в области машинного обучения в 7,2 раза, чем в 2015 году.
  • По сравнению с 2018 годом количество вакансий специалистов по анализу данных увеличилось в 1,4 раза, по машинному обучению в 1,3 раза.
  • 38% открытых вакансий приходится на ИТ-компании, 29% компании из финансового сектора, 9% сфера услуг для бизнеса.


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

К сожалению, собеседование по Data Science сейчас обычно выглядит так: кандидат рассказывает, что попробовал применять пару-тройку библиотек, на вопросы о том, как именно работают алгоритмы, ответить не может, затем просит 200, 300, 400 тысяч рублей в месяц на руки.

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

Виктор Кантор
Chief Data Scientist в МТС


Кого ждут работодатели



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

С инструментами у новичков на рынке все достаточно хорошо. Краткосрочные курсы позволяют быстро освоить их и приступить к работе.

По исследованию HeadHunter и Mail.ru, самый востребованный навык владение Python. Оно упоминается в 45% вакансий специалистов по анализу данных и в 51% вакансий в области машинного обучения.

Также работодатели хотят, чтобы специалисты по анализу данных знали SQL (23%), владели интеллектуальным анализом данных (DataMining) (19%), математической статистикой (11%) и умели работать с большими данными (10%).

Работодатели, которые ищут специалистов по машинному обучению, наряду со знанием Python ожидают, что кандидат будет владеть C++ (18%), SQL (15%), алгоритмами машинного обучения (13%) и Linux (11%).

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

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

Эмиль Магеррамов
Руководитель группы сервисов вычислительной химии, Biocad


Сама структура и продолжительность курсов не позволяет углубиться на необходимый уровень. Выпускникам зачастую не хватает тех самых soft skills, которые обычно пропускаются при чтении вакансии. Ну правда, кто из нас скажет, что у него нет системного мышления или желания развиваться. Однако применительно к специалисту Data Science речь о более глубокой истории. Здесь, чтобы развиваться, нужен достаточно сильный уклон в теорию и науку, который возможен только на продолжительном обучении, например, в университете.

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

Виктор Кантор
Chief Data Scientist в МТС


Где учиться, чтобы найти работу в Data Science



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

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

Иван Ямщиков
Академический директор онлайн-магистратуры Наука о данных


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

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

Иван Ямщиков
Академический директор онлайн-магистратуры Наука о данных


Отсутствие карьерного потолка главное преимущество магистерской программы. За два года специалист получает мощную теоретическую базу. Вот так выглядит уже первый семестр в программе Data Science НИТУ МИСиС:

  • Введение в Data Science. 2 недели.
  • Основы анализа данных. Обработка данных. 2 недели
  • Машинное обучение. Предобработка данных. 2 недели
  • EDA. Разведывательный анализ данных. 3 недели
  • Основные алгоритмы машинного обучения. Ч1 + Ч2 (6 недель)


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

На сайте университета науки и технологий МИСиС проходят Дни открытых дверей и вебинары для тех, кто хочет работать в Data Science. Представители НИТУ МИСиС, SkillFactory, HeadHunter, Facebook, Mail.ru Group и Яндекс, рассказываю про самое важное:

  • Как найти свое место в Data Science?,
  • Можно ли стать data scientist с нуля?,
  • Сохранится ли необходимость в data scientist-ах через 2-5 лет?,
  • Над какими задачами работают специалисты data science?,
  • Как построить карьеру в Data Science?

Обучение онлайн, диплом государственного образования. Заявки на программу принимаются до 10 августа.
Подробнее..

Перевод Как изучать Machine Learning каждый день 9 месяцев подряд

10.07.2020 14:07:02 | Автор: admin
image

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

Я уволился из Apple. Запустил веб-стартап, но из этого ничего не вышло. Душа к этому не лежала.

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

А воодушевление не оплачивает мои счета.

По выходным я начал подрабатывать в Uber, чтобы платить за учебу.

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

Я изучал машинное обучение. Днями напролет, пять дней в неделю. Было сложно. Да и сейчас не легче.

Uber по выходным. Машинное обучение по будням. Такой была моя повседневная жизнь. Я должен был учиться. Я был обязан научиться, я просто не мог водить. На тот момент у меня не было жизненной цели, но я точно знал, что это не вождение. Одним субботним вечером я заработал $280 и получил штраф в размере $290. Минус $10 за одну ночь.

Через девять месяцев после получения своей личной степени по ИИ, я нашёл работу. И это была лучшая работа в моей жизни.

Как у меня получалось заниматься каждый день?
А вот как.

1. Уменьшите пространство поиска


Машинное обучение это обширная область. Там и код, и математика, вероятность, статистика, данные и алгоритмы.

В учебных ресурсах нет недостатка. А изобилие вариантов равняется их отсутствию.
Если вы серьезно относитесь к обучению, то создайте для себя учебный план. Вместо того, чтобы тратить недели с мыслями о том, следует ли вам учить Python или R, начните курс на Coursera или edX, начините с математики или изучения кода, потратьте одну неделю разрабатывая приблизительный план, а затем придерживайтесь его.

Именно так я пришел к своей собственной степени магистра в области ИИ. Я решил, что сначала изучу код и в качестве языка программирования выбрал Python. Я повсюду искал разные курсы и книги и отобрал те, которые заинтересовали меня больше всего. Всем ли подойдет такой способ? Скорее всего, нет. Но он был моим, поэтому и сработал.

Как только у меня появился учебный план, путь, по которому я мог двигаться, я больше не мог терять времени на размышления. Я мог подняться с кровати, сесть за стол и выучить то, что было нужно (и что хотелось) выучить.

Я не был к себе строг. Если я находил что-то интересное, то сворачивал со своего пути и учил новые вещи.

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

2. Измените свою окружающую обстановку


Первая апельсиновая ферма вашего дедушки потерпела неудачу.

Почва была хорошая. Он посадил семена. Да и оборудование не могло подвести.
Что же случилось?

Было слишком холодно. Апельсины растут при высоких температурах. Ваш дедушка знал как вырастить апельсины, но холодный климат не оставил им ни шанса.

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

Без мотивации к обучению вам не поможет ни ноутбук, ни интернет, ни лучшие книги.
Почему?

Проблема в том, что вас окружает.

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

Что с этим делать?

Я превратил свою комнату в убежище для занятий. Вымыл её. Отключил все оповещения и положил телефон в комод в другой комнате.

Я предупредил своего друга, что поговорю с ним после 16:00, когда включу телефон. Он согласился.

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

Измените окружающую вас обстановку и знания будут течь к вам рекой.

3. Настройте систему так, чтобы вы всегда оставались победителем


Проблема 13 поставила меня в тупик. Я застрял.

Я хотел разобраться с ней ещё вчера, но не смог.

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

Я откладываю. Знаю, что должен учиться. Но не сегодня.

Это цикл.

Черт возьми. Я уже был в подобной ситуации. Однако, ничего не изменилось.

Стопка книг уставилась на меня. Проблема 13. Я завожу таймер. 25 минут. Знаю, что может и не решу проблему, но я могу сесть и попытаться.

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

Таймер выключается, я завожу новый. И ещё один. Спустя три подхода я решаю проблему. Я говорю себе, что я лучший инженер в мире. Конечно, это неправда, но это не имеет значения.

Даже маленькое достижение это достижение.

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

Можете контролировать: четыре подхода по 25 минут в день.
Не можете контролировать: завершение каждой новой задачи в тот же день.


Настройте систему так, чтобы бы всегда выигрывали.

4. Иногда ничего не делайте


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

Я прошел курс на Coursera Учимся учиться. Одной из тем было сфокусированное и рассеянное мышление.

Сфокусированное мышление происходит при выполнении одной-единственной задачи.

Рассеянное мышление происходит, когда вы ни о чем не думаете.

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

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

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

Если вы делаете четыре подхода сфокусированного мышления по 25 минут, то потом отправляйтесь на прогулку. Вздремните. Сядьте и подумайте о том, что вы выучили.
Как только вы чаще начнете ничего не делать, то увидите ценность многих вещей из-за освободившегося пространства. Комната это четыре стены вокруг пространства, в шине нет ничего, кроме воздуха, а корабль плывет из-за пустого пространства.

В вашей учебной рутине должно быть больше ничегонеделания.

5. Отстой, с которым нужно смириться


Учеба отстой.

Сегодня вы выучите то, что забудете уже завтра.

Потом ещё, и снова забудете.

И ещё.

Забыли.

Вы проводите все выходные за учебой, идете на работу в понедельник и все повторяется.
Кто-то спросил меня как я надолго запоминаю то, что прочитал в книгах. Я ответил, что никак. Если повезет, я запомню 1% от всего содержания. Однако, когда этот 1% пересекается с 1% чего-то ещё, происходит волшебство. В такие моменты я чувствую себя экспертом по соединениям точек.

Ты понимаешь как много еще предстоит выучить, когда уже учишь что-то на протяжении года.
Когда это закончится?

Никогда. Вы всегда находитесь в самом начале пути.

Смиритесь.

6. Принцип трехлетки


На днях я был в парке.

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

Он смеялся, прыгал и снова смеялся.

Подошла его мама.

Пойдем, Чарли, нам нужно идти.

Она уводила его, а он продолжал смеяться, размахивая своей синей пластиковой лопаткой.
Что же его так увлекло?

Он играл. Он веселился. Весь мир был в новинку. В нашей культуре есть четкая граница между работой и игрой. Обучение это работа.

Вы должны учиться, чтобы получить работу. Вы должны работать, чтобы зарабатывать деньги. За деньги можно купить свободное время. И только в это свободное время вы можете быть как Чарли носиться и смеяться.

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

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

И тогда у вас, как и у Чарли, съезжающего с горки, появится такое же чувство.

Вы учите что-то одно, используете это, чтобы выучить что-то другое, застреваете, преодолеваете это и учитесь чему-то ещё. Превращаете весь процесс в танец.

Я узнал, что если у вас есть структурированные данные в виде таблиц, колонок или датафреймы, то такие ансамблевые алгоритмы как CatBoost, XGBoost и LightGBM подходят лучше всего. А для неструктурированных данных вроде картинок, видео, естественного языка или аудио, вашим выбором должны стать глубокое обучение и/или перенос обучения.

Я соединил точки. Сказал себе, что эксперт в этом. Танцевал от точки к точке.

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

Это принцип трехлетки. Воспринимать все как игру.

Ну, достаточно.
Мне пора спать.
Это бонус.

7. Сон


Если вы плохо спите, вы будете плохо учиться.

Наверное, и вы не спите достаточно.

Я точно не спал. Вечера пятницы и субботы были самыми прибыльными в Uber. Люди ходили в рестораны, на вечеринки, в ночные клубы. Я нет, я водил. Я работал до 2-3 утра, возвращался домой и спал до рассвета в 7-8 утра. Два дня были сплошным кошмаром. Наступал понедельник, а я будто бы жил в другом часовом поясе. Во вторник было чуть лучше, к среде все вставало на свои места. Но наступала пятница и все повторялось.

Такой нарушенный режим сна был просто недопустим. Я же хотел усовершенствовать свое обучение. Сон очищает мозг, позволяя образовываться новым связям. Я заканчивал работать в 10-11 вечера, возвращался домой и спал по 7-9 часов. Меньше денег, больше знаний.

Не меняйте сон на время для обучения. Делайте наоборот.

Машинное обучение это обширная область.

И чтобы хорошо изучить не только её, но и что угодно, вы должны помнить:

  • Уменьшите пространство поиска
  • Измените окружающую вас обстановку
  • Смиритесь, что можете облажаться
  • Иногда ничего не делайте
  • Воспринимайте обучение как игру, и
  • Сон это путь к знаниям


image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Сколько зарабатывает Аналитик данных обзор зарплат и вакансий в России и за рубежом в 2020

25.09.2020 20:20:19 | Автор: admin

Привет, Хабр! 28 сентября, Skillfactory запускает новый поток курса Data Analyst, поэтому мы решили сделать широкий обзор рынка вакансий, которые предлагают сегодня компании.

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

Мы проанализировали 450 вакансий на должность аналитика данных в России и за рубежом и собрали результаты в этой статье.

Кто такой аналитик данных и что он должен знать


Прежде чем анализировать вакансии, разберемся, что делает Data Analyst в компании. В IT-сфере есть три направления специальностей по работе с данными: Data Analyst, Data Engineer и Data Scientist.

Data Analyst собирает информацию, обрабатывает ее и интерпретирует ее на человеческий язык. По сути, он переводит статистику и big data в понятные и наглядные выводы, которые можно использовать для развития конкретного проекта или бизнеса в целом.

Результат работы аналитика данных это основа для принятия любых бизнес-решений.

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

Data Scientist занимается стратегической работой с информацией. Именно он создает системы прогнозирования, моделирования и динамического анализа, внедряет алгоритмы автоматизации и обучения.

Главная сложность в том, что границы между этими тремя специальностями довольно размыты. Большинство компаний не видят разницы, поэтому часто в вакансиях Data Analyst встречаются требования, которые больше подходят специалистам Data Engineer или Data Scientist.

В основном это обусловлено спецификой рынка. Если в IT-компаниях знают, что Data Analyst, Data Engineer и Data Scientist это в идеале три разных специалиста или даже три разных подразделения, то в продуктовых компаниях и производствах часто об этом даже не задумываются.

Что требуют работодатели от аналитика данных


Мы проанализировали свыше 450 вакансий на позицию аналитика данных, открытых в августе-сентябре 2020 года.

Во многих случаях требования к специалистам очень отличаются. Как мы писали выше, границы между Data Analyst, Data Engineer и Data Scientist стерты, поэтому часто бывает, что в заголовке вакансии пишут Аналитик данных, а фактически вакансия полностью соответствует Инженеру данных.

Но мы смогли выделить набор хард и софт скилов, которые работодатели указывают в большинстве вакансий на должность аналитика данных.

Хард скилы


Python с библиотеками для анализа данных Pandas и NumPy. Это мастхэв, его знание хотя бы на базовом уровне требуют 83% компаний в отрасли. Знание R, JavaScript и других ЯП требуют нужны всего лишь 17% работодателям.

Интересно, что в 2013 году по результатам опроса Data Analyst и Data Scientist язык R в аналитике данных был куда популярнее его использовали 61% специалистов.

SQL практически во всех вакансиях требуется знание SQL и навыки работы с реляционными базами данных. Чаще всего требуют умение писать запросы и оптимизировать их.

Навыки работы с NoSQL системами управления базами данных вроде MongoDB, CouchDB или Apache Cassandra работодатели требуют довольно редко примерно в 9% вакансий.

Power BI, Qlik, Tableau. Большинство компаний не требует знаний какой-нибудь конкретной программы визуализации данных. Обычно они указывают одну из трех на выбор или пишут системы визуализации данных без указания конкретной.

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

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

То есть, важно не только то, что делает аналитик данных в рамках своей специальности, но и то, как он это делает.

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

Excel и Google Sheets. Как ни странно, но в трети вакансий требуется знание электронных таблиц. В основном это нужно продуктовым и консалтинговым компаниям, которые довольно слабо пересекаются с диджитал-разработкой, или же относительно небольшим проектам, где весь отдел аналитики состоит из нескольких человек.

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

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

Высшее образование в области математики пригодится, но при должном усердии все необходимые функции можно изучить и самому. Но для Data Scientist глубокое знание математики уже считается критичным. Если вы планируете расти из Data Analyst в Data Scientist, то математику нужно будет подтянуть.

По основным хард скилам это все. Остальные встречаются реже, чем в 10% вакансий, поэтому их можно списать на индивидуальные особенности работы в отдельных компаниях.

Софт скиллы


В целом они практически совпадают для всех специальностей, которые работают с данными:

  • Критическое мышление
  • Аналитический склад ума
  • Умение правильно излагать и доносить информацию
  • Ответственность и внимание к деталям
  • Бизнес-мышление
  • Готовность принимать решения и брать ответственность за результат
  • Многозадачность
  • Чувство юмора

Интересно то, что многие считают профессию аналитика данных малообщительной. Аналитик кажется нердом, который работает только с цифрами, а не с людьми.

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

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

Обязательный английский часто приятно отражается на зарплате. Вакансии, которые предлагают работу на международных проектах, гарантируют денежную компенсацию в 1,3-2 раза больше, чем русскоязычные.

Зарплата и другие плюшки для аналитика данных


Теперь перейдем к самому интересному к зарплате. Мы проанализировали открытые вакансии на сайтах HH.ru и Хабр Карьера.

Больше всего вакансий для аналитиков данных по состоянию на 12.09.2020 открыто в Москве (241) и в Санкт-Петербурге (74). Для сравнения, во всей остальной России актуально всего 99 вакансий на эту должность.

Интересно, что только 20% компаний указывают уровень заработной платы в самом объявлении. Остальные 80% предпочитают обсуждать денежное вознаграждение в личной беседе с соискателем.

Разброс зарплат довольно большой. Зависит он не только от опыта соискателя, но и от географии. К примеру, аналитик-стажер в Перми получает 25 000 рублей, а Data Analyst в московском офисе международной компании зарабатывает 200 000 рублей.

В Москве средняя зарплата аналитика данных составляет 134 000 рублей. На нее вполне может рассчитывать хороший специалист с опытом от 2 лет.

Стажеры и Junior-спецы получают от 60 000 рублей. Есть небольшое количество вакансий, которые предлагают ниже этой суммы (8%), но они в основном предлагают работу не на полный день либо с ограниченной загрузкой в неделю.



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

Руководители отделов аналитики и Senior-спецы могут рассчитывать на зарплату от 170 000 рублей. Есть даже вакансии, которые предлагают больше 250 000 рублей в месяц. Да, для них требуется опыт больше 5 лет в аналитике и большой пул компетенций, но такие вакансии есть. Так что вполне ясно, куда можно расти.

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

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

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

Аналитики данных востребованы в любом крупном и среднем бизнесе, особенно в тех проектах, которые относятся к диджитал и IT. Финтех-банки, диджитал-агентства, продуктовые компании, которые налаживают онлайн-систему продаж, консалтинговые проекты.

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

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

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

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

Мы также провели сравнительный анализ вакансий из Украины и Беларуси.

Средняя зарплата аналитика данных в Украине порядка 20 000 гривен (53 000 рублей). В столице есть вакансии с оплатой в 2-2,5 раза выше, но их выставляют преимущественно международные компании с филиалами в Киеве.

Абсолютно та же ситуация и в Беларуси. Средние размер заработной платы аналитика данных составляет 2800 белорусских рублей (81 000 рублей), Но разброс зарплат очень большой. В Гомеле, к примеру, аналитик с опытом от года получает в среднем 1100 белорусских рублей (31 000 российских рублей), а в Минске специалист может зарабатывать вплоть до 10 000 (287 000 российских рублей).

Откуда прийти в профессию и куда расти аналитику данных


Есть мнение, что попасть в касту аналитиков можно только с исключительными знаниями математики. Но это не так.

В аналитику обычно уходят Junior- и Middle-разработчики на Python. Если вдобавок есть базовые знания SQL вообще отлично. В таком случае разобраться со всеми особенностями работы будет намного проще.

Также можно начать карьеру непосредственно с аналитика. Выбирайте один из десятков доступных курсов и вперед. Высшую математику знать необязательно. Для Data Analyst уровня Junior и Middle нужно только знание инструментов работы с данными. А в большинстве случаев хватит и школьных знаний математики.

Возможностей роста для специалиста аналитики данных тоже хватает. Три самых очевидных: Data Mining Specialist, Data Engineer, Data Scientist. Первый работает непосредственно с поиском данных для аналитики, второй разрабатывает инфраструктуры данных, а третий прогнозированием и стратегией.

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

Специально для материала, мы попросили дать комментарий о необходимых навыках для роста в BI-аналитике,Александра Царёва, основателя компании SmartDataLab, лидера образовательного курса BI SkillFactory и Сергея Земскова руководителя направления Power BI/DWH SmartDataLab и преподавателя Bootcamp SkillFactory.

В обзоре указаны мастхэв компетенции, но если вы хотите и дальше расти как Аналитик данных, вам понадобится быть в курсе ETL и изучить:
Так называемый золотой треугольник Microsoft: SSRS, SSIS, SSAS;
Иметь представление о других промышленных ETL, например, KNIME;
Литературу по архитектуре данных, например, книгу Билла Инмона Методология Кимбалла;
Также нужно хотя бы в первом приближении понимать, что такое Informatica, GreenPlum, Pentaho, чем они друг от друга отличаются и как работают.
Быть в курсе, что такое SAP Web Analytics и другие новые BI решения от SAP, хотя сейчас отмечается переход с этих решений на Power BI (который, по исследованию проведенному в июле-августе телеграм каналом вакансий и фриланса в BI/DWH BI HeadHunter, в топе по запросу от работодателей).

Это солидный пласт знаний, но он сделает вас уберспецом.

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

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

В вакансиях на сайтах работы часто смешивают понятия. Даже встречаются предложения вроде Бизнес/системный аналитик. Не надо так. Это два разных направления.

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

Аналитик данных это перспективная и востребованная профессия. И чтобы стать Data Analyst, не нужно быть Перельманом и уметь решать теорему Пуанкаре хватит школьных знаний математики и упорства в освоении инструментов аналитика.

Совсем недавно мы запустили первый в России Онлайн-буткемп по Data Analytics, включающий в себя 5 недель обучения, 5 проектов в портфолио, оплачиваемая стажировка для лучшего выпускника. Это суперинтенсивный формат для самых целеустремленных: учиться нужно фултайм. Зато в итоге выход на работу уже через 13 месяца.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:



Подробнее..

Перевод - recovery mode Магистратура по Data Science советы аспиранта Гарвардского университета

23.07.2020 16:12:40 | Автор: admin
Перевод выполнен в рамках набора студентов в онлайн-магистратуру по Data Science с гос.дипломом МИСиС.

image

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

Это мой первый пост на Medium, поэтому я хотел бы рассказать о себе и о своем предыдущем опыте. Я аспирант Гарвардского университета по специальности Экологическая инженерия и вычислительная техника, а также подрабатываю консультантом по машинному обучению и блокчейну в британской консалтинговой фирме Critical Future, специализирующейся на искусственном интеллекте. Мои исследования сосредоточены на внедрении машинного обучения и искусственного интеллекта в науку об окружающей среде с использованием сенсорных систем, основанных на дронах, способных самостоятельно перемещаться для составления картины химического состава нижних слоев атмосферы, преимущественно в тропических лесах Амазонки (для тех, кто интересуется этим проектом, я опубликую отдельные статьи по этой теме в ближайшем будущем).

Я начал свой путь к PhD в Гарвардском университете осенью 2017 года, получив степень бакалавра и магистра в области машиностроения в Имперском колледже Лондона, а последний год обучения я закончил за границей в Национальном университете Сингапура. Во время учебы в бакалавриате я был мало знаком с Data Science и статистикой в целом, но при этом я много знал о программировании на Matlab, C и Visual Basic, а также имел сильную математическую базу.

До того, как я начал учиться в Гарварде, я никогда не программировал на Python, и даже не слышал об R. Я никогда не занимался параллельными вычислениями, не создавал кластеров, а машинное обучение и искусственный интеллект были вещами, о которых я обычно слышал только из антиутопических романов и фильмов.

Участие в программе Гарварда с акцентом на информатике и машинном обучении с таким скромным бекграундом было похоже на восхождение по отвесной скале (изнурительно и шатко). Впрочем, это Гарвард, так что вряд ли можно ожидать чего-то меньшего. Гарвардская программа PhD требует от прохождения 10 курсов, из которых обычно 8 магистерского уровня. Их можно проходить в своем темпе, но вы должны закончить их до выпуска, что в среднем занимает 5 лет. Студентам рекомендуется заканчивать все курсы в течение первых двух лет, после чего они могут получить свою (формально бесплатно) магистерскую степень. В конце весеннего семестра 2019 года я выполню эти требования и получу диплом, после чего сосредоточусь исключительно на исследованиях.

Осенью 2018 года в Гарварде была создана первая в истории группа слушателей магистерской программы по Data Science. Это двухгодичная программа, состоящая из основных курсов по Data Science, этики, а также прикладной математики, Computer Science и факультативов по статистике/экономике. Приехав за год до всех этих студентов, я буду одним из первых, кто выполнил основные предварительные требования для этой программы, что дает мне уникальный опыт в плане эффективности получения степени в области Data Science.

За последние 18 месяцев я прошел целый ряд курсов. Одним из первых был CS205: Параллельные вычисления, где я впервые научился программировать под Linux и создал вычислительные кластеры, способные обеспечивать линейное ускорение матричных вычислений, и кульминацией этого курса стал финальный проект, включавший параллельные вычисления на Python с Dask на кластере Kubernetes.

Также я взял AM207: Продвинутые научные вычисления, который предлагает Гарвардская Extension School (а это значит, что этот курс может пройти любой желающий). Этот курс был посвящен байесовской статистике и ее внедрению в машинное обучение, и он включал в себя бесчисленные часы симуляций на основе методов Монте-Карло с цепями Маркова (MCMC), работу с теоремой Байеса и даже просмотр короткого видео о Супермене, который заставил время повернуться вспять, (чтобы продемонстрировать концепцию реверсивности времени в машинном обучении)

Также одним из основных курсов является AC209a, в котором основное внимание уделяется основам машинного обучения и Data Science. Я бы сказал, что этот курс включает в себя то, о чем большинство людей думают, когда кто-то произносит слова Data Science или машинное обучение. Речь идёт о том, чтобы научиться проводить исследовательский анализ данных и запускать регрессоры и классификаторы с использованием sklearn. Большая часть занятий сосредоточена на понимании этих методов и на том, как лучше всего оптимизировать их для заданного набора данных (для этого нужно немного больше, чем просто использовать model.fit(X_train, y_train)...). Еще один курс AC209b: Дополнительные разделы Data Science, который является расширением первого класса. По сути, это курс по Data Science на стероидах, в котором первые несколько лекций начинаются с обобщенных аддитивных моделей и создания красивых сплайнов для описания наборов данных. Тем не менее, все быстро перерастает в параллельный запуск 2500 моделей, использующих Dask на кластере Kubernetes, в попытке провести гиперпараметрическую оптимизацию на 100-слойной искусственной нейронной сети. При этом, на самом деле, это было даже не самое сложное из того, что мы делали все это происходило всего лишь на третьей недели лекций, если говорить о курсе в целом.

Также я прошел и другие курсы, включая CS181: Машинное обучение, который охватывает математические основы регрессии, классификации, обучения с подкреплением и другие области с использованием как частотных, так и байесовских методов; AM205: Научные методы решения дифференциальных уравнений, а также AM225: Усовершенствованные методы решения дифференциальных уравнений в частных производных. Есть множество других курсов, которые я также мог бы пройти в течение оставшегося времени в Гарварде, чтобы углубить свои знания, такие как CS207: Разработка систем для вычислительных наук, AM231: Теория принятия решений, или AM221: Продвинутая оптимизация. Я также должен уточнить, что каждый из этих курсов имел финальный проект, который я смог добавить в свое портфолио.

Теперь перейдем к теме статьи после всего этого времени, которое я потратил на обучение тому, как быть хорошим специалистом в Data Science, стоило ли оно того? Или я мог сделать все это сам? Точнее, стоит ли кому-то, кто хочет заниматься этим в качестве карьеры, инвестировать 1-2 года и более 100 000 долларов в получение степени в области Data Science?

Я не думаю, что всему, чему я научился за эти 18 месяцев курсов по Data Science, я мог бы научиться, читая книги, просматривая онлайн-видео и изучая документацию различных пакетов программного обеспечения. Тем не менее, я не сомневаюсь, что получение степени в Data Science может ускорить чью-либо карьеру, а также может дать ценный опыт работы с реальными проектами, которые можно было бы обсудить в ходе интервью и использовать в портфолио. Лично мне потребовались бы годы, чтобы понять, как оптимизировать 100-слойную нейронную сеть, работающую на параллельном кластере в Google Cloud, если бы я просто сидел дома и смотрел видео на Youtube я даже представить себе не мог, как это сделать.

Любопытство к Data Science это замечательно, и я хотел бы, чтобы больше людей интересовались этой темой. С момента информационного взрыва кажется, что в ближайшее десятилетие данные станут новой мировой религией, и поэтому неизбежно, что миру понадобится гораздо больше специалистов в Data Science. Тем не менее, любопытство может завести вас очень далеко, и наличие клочка бумаги, который показывает, что вы потратили время, инвестировали в приобретение навыков и хороших привычек и стали по-настоящему опытным ученым, занимающимся данными, выделит вас среди остальных. Data Science существует не только в виде соревнований от Kaggle, как некоторые, кажется, думают.

Мой совет для тех, кто хочет заниматься Data Science, заключается в том, чтобы получить хорошую основу базу в статистике и математике, также я советую приобрести некоторый опыт в программировании на таких языках, как Python и R, а также освоить разработку под Linux. Большинство студентов на занятиях по информатике, которых я видел, похоже, борются с такими аспектами, связанными с информатикой, как работа с контейнерами Docker и создание и управление распределенными кластерами, работающими на некоторой облачной инфраструктуре. Для того, чтобы стать опытным специалистом в области Data Science необходимо овладеть многими сложными навыками, и я уж точно я не могу назвать себя экспертом. Однако, накопив некоторый опыт, я чувствую себя достаточно уверенным в том, что смогу продолжать развивать свои собственные навыки в области Data Science и машинного обучения, а также применять их в проектах и исследованиях, связанных с промышленностью, не опасаясь заниматься плохой наукой.

Если вы хотите узнать что из себя представляет курс по Data Science, я рекомендую взглянуть на онлайн-курсы, предлагаемые университетами, за прохождение которых можно часто получить зачетные единицы, необходимые для получения степени. Сейчас в Гарварде есть студент, который прошел 3 курса по информатике в Extension School, и теперь он имеет степень в области вычислительной техники и инженерии и является одним из ассистентов преподавателя в продвинутом курсе по Data Science. Все возможно!



Онлайн-курсы по Data Science с гос.дипломом МИСиС


image

НИТУ МИСиС и SkillFactory (онлайн-школа по Data Science), заключили соглашение о создании совместной онлайн-магистратуры Наука о данных, где будут стажировки в реальных проектах, чатики с менторами, индивидуальный план обучения. Занятия будут вести профессора НИТУ МИСиС и практикующие специалисты из Mail.ru Group, Яндекса, банков Тинькофф и ВТБ, компаний Lamoda, BIOCAD, АльфаСтрахование и др.

Это первый в России случай партнерства частной образовательной компании с государственным вузом по модели OPM (Online Program Management). Индустриальным партнером программы будет Mail.ru Group. Программу также поддерживают NVidia, Ростелеком и Университет НТИ 20.35.

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

Полезные материалы


Подробнее..

Категории

Последние комментарии

© 2006-2020, personeltest.ru