Полное руководство с предложениями для побочных проектов

Мотивация

Моя мотивация для этой серии состояла в том, чтобы объяснить, как успешно заниматься машинным обучением в качестве побочного проекта с друзьями. Успех здесь означает создание небольшой группой непрерывного процесса, который начинается со сбора данных и заканчивается получением полезных результатов. Что будет полезным, в конечном итоге зависит от вас и ваших друзей, но в этой заключительной части серии я предлагаю несколько идей, которые могут помочь вам начать работу. Я также поместил все TL; DR из частей 1–4 в конец, так что это может послужить основным руководством по началу работы.

Машинное обучение — это программное обеспечение, которое адаптируется на основе реальных примеров из данных. Как это круто?! Но также, насколько это сложно? Вы хотите написать программное обеспечение, которое может эффективно переписывать себя, чтобы принимать лучшие решения на основе проанализированных данных. Я с трудом могу сделать два таких дела одновременно, не упав. Машинное обучение сложно и требует множества различных навыков. Работа в команде позволяет людям проявить себя там, где они сильны, и учиться новому у других.

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

Уроки выучены

В дополнение ко всем особенностям, изложенным в частях 1–4 (кратко изложенных ниже), вот три важных урока, которые я усвоил, занимаясь машинным обучением в свободное время.

  1. Сольные проекты легко начать, но трудно закончить. Создать команду сложно, но уйти еще труднее. Около года назад я понял, что каждый проект, который я начинал один, терпел неудачу, в то время как один побочный проект, который я делал для друга с небольшой командой, процветал. Я хотел заниматься проблемами машинного обучения в спорте, поэтому собрал небольшую группу единомышленников, чтобы попробовать. Это заняло больше времени, чем ожидалось, но теперь я не думаю, что смог бы убить проект, если бы попытался.
  2. Машинное обучение — это в основном разработка программного обеспечения и обработка данных. Глубокое понимание статистики, алгоритмов, науки о принятии решений и т. д. может помочь вам в машинном обучении, но все это не имеет значения, если вы не пишете хороший код. Когда я начинал, я хорошо понимал эти вещи концептуально, но едва мог кодировать свой выход из бумажного пакета. Я провел больше года, в основном занимаясь простыми программными проектами, прежде чем смог уверенно выполнять настоящую работу по машинному обучению.
  3. Попытка автоматизировать принятие решений показывает, насколько сложным может быть принятие решения. В абстрактном смысле машинное обучение — это написание инструкций для компьютера, который научится принимать решения на примерах. На самом деле выполнение этого упражнения показывает, как много мы, люди, бессознательно обрабатываем данные, чтобы принимать простейшие решения. Процесс разработки решения оказался намного более трудоемким, чем я предполагал.

Идеи для начала

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

Если вы хотите заниматься машинным обучением с друзьями, работайте над чем-то, что постоянно генерирует новые данные. Хорошо начать со статического набора данных, но когда вы будете готовы повысить уровень, вы не захотите ждать, пока утонет еще один Титаник (не дай Бог). Отличной отправной точкой для изучения потоков является Rapid API Hub. У них есть множество бесплатных API, которые вы можете использовать для начала работы, и довольно разумные цены на платные услуги. Все мои примеры ниже имеют API, доступные в Rapid Hub, но если вы серьезно отнесетесь к любому из них, вы, вероятно, найдете другие источники.

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

Виды спорта

Почему мне это нравится

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

Мне также нравится это приложение, потому что вы можете выбирать задачи классификации и регрессии. Выиграют ли сегодня «Доджерс», сколько пасовых ярдов будет у Патрика Махоумса, превысит ли счет в игре «Уорриорз» 250 и т. д.? Задача заключается в разработке сильных функций и определении границ для обучающих наборов. Профессиональные виды спорта очень конкурентны и постоянно меняются, поэтому вы должны быть в курсе событий. Это то, что отличает прикладное машинное обучение от фундаментальной науки. Факторы, влияющие на диагностику диабета, могут незначительно меняться в течение десятилетий, в то время как характеристики, предсказывающие победы в НФЛ, вероятно, значительно изменятся всего за несколько лет. Мне это нравится, потому что это подталкивает вас к постоянному улучшению вашей работы.

Когда начать

Чтобы начать работу со спортивными данными, я рекомендую выбрать вид спорта, который вы знаете и любите смотреть, а затем потратить несколько долларов на качественный набор исторических данных. Big Data Ball — лучший вариант, исходя из моего опыта. В Rapid API Hub также есть несколько API для разных видов спорта с бесплатными опциями, если вы не хотите ничего платить, чтобы начать. Будьте осторожны, если вы погуглите что-нибудь с ключевыми словами данные о спортивных ставках, вы утонете в мусорной рекламе и предлагаемых ссылках на хищнические продукты.

Что учитывать

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

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

Трейдинг

Почему мне это нравится

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

Если «обыграть рынок» означает инвестировать миллиарды долларов других людей, чтобы последовательно превзойти основные индексные фонды, то я согласен, что это практически невозможно. Но если это означает вложение скромных сумм собственных денег и размещение нескольких хорошо проработанных сделок, чтобы немного превзойти S&P 500, то я бы не стал ставить против вас. Реальность такова, что рынки беспорядочны и полны разных игроков, действующих с разными способностями. Если ваша основная цель — работать над интересными задачами по машинному обучению с друзьями, торговля предлагает именно это, плюс ненулевой шанс заработать деньги, если вы подходите к этому вдумчиво.

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

Когда начать

Самый быстрый и простой способ начать работу — это yfinance учебник по Python. В этой библиотеке есть исторические ежедневные цены от Yahoo Finance за десятилетия. У них также есть данные с более высоким разрешением, но история ограничена. Это отличный способ начать создавать базовую структуру прогнозирования/тестирования на исторических данных. Как только вы освоитесь, ознакомьтесь с разделом Быстрое финансирование API, чтобы узнать о различных API, которые могут помочь вам. Advanced in Financial Machine Learning — тоже отличный ресурс. Если/когда вы захотите попробовать программную торговлю, Альпака — одна из самых надежных платформ. Когда вы создаете учетную запись и вносите средства, вы также получаете доступ к данным без дополнительной платы.

Что учитывать

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

Погода

Почему мне это нравится

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

Когда начать

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

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

Что учитывать

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

Последние мысли

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

TLDR из частей 1–4

Часть 1

Машинное обучение с друзьями, часть 1: создание команды и организация.

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

  1. Купите домен от чего-то вроде Namecheap за 10 долларов или меньше в год.
  2. Подпишитесь на начальный план Рабочее пространство Google за 6 долларов США за пользователя в месяц, чтобы управлять организацией и предоставлять все необходимое для совместной работы, если вы не выберете другие инструменты.
  3. Настройте бесплатное рабочее пространство в Slack и добавляйте пользователей через их только что созданные аккаунты Google. Базовая версия бесплатна для неограниченного количества пользователей. Профессиональная версия за 9 долларов за пользователя в месяц подходит для видеозвонков с совместным использованием экрана, если вы много программируете удаленно.
  4. Настройте учетную запись в Atlassian и добавьте свою команду через их учетные записи Google, затем активируйте Jira и Confluence для отслеживания задач и документирования. Оба бесплатны. Если у вас десять или меньше пользователей, Jira стоит 7,50 долларов США за пользователя в месяц, а Confluence — 5,50 долларов США за пользователя в месяц после этого.

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

Часть 2

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

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

TL;DR:

  1. Получите всех на Unix/Linux. Если они используют Mac, все готово. Если они используют Windows, установите WSL2 и запустите Linux на своем ПК.
  2. Выберите облачную платформу для вычислений по запросу и выберите образовательный ресурс, если у вас нет опыта настройки учетных записей и управления пользователями. Если для вас это все в новинку, выбирайте AWS или GCP и покупайте курс от Udemy или Coursera, чтобы научиться правильно настраивать. Кривая обучения крутая, если вы новичок в этом деле, а ошибки могут дорого обойтись. Однако оно того стоит.
  3. Настройте свой аккаунт с бюджетом и продуманными разрешениями для вашей команды. Не делайте всех администраторами без уважительной причины.
  4. Выберите вариант для виртуальных машин по запросу. Если вы новичок в этом и используете AWS, с инстансами Notebook SageMaker легко начать работу. В GCP попробуйте верстак Vertex AI. Если кто-то в вашей команде более опытен, и вы не хотите платить за эти услуги, я рекомендую вам настроить свои собственные экземпляры, но убедитесь, что остальной части вашей команды будет так же легко их использовать, как и им. для вас.
  5. Используйте облачные сервисы по мере необходимости, а не просто делайте все в облаке по умолчанию.

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

Часть 3

Машинное обучение с друзьями, часть 3: сбор данных, необходимый для ползания, ходьбы и бега.

Слишком долго; не читал? Баммер, это хорошо. Что ж, наслаждайтесь дум-скроллингом за те 15 минут, которые вы не потратили на чтение этого.

  1. Настройте облачную учетную запись в AWS или GCP, если вы еще этого не сделали. Если вы никогда раньше этого не делали, купите курс основ AWS или GCP на Udemy или Coursera, чтобы пройти его.
  2. Создавайте корзины для данных и блокируйте любой публичный доступ. Явно определите разрешения, чтобы только ваши пользователи могли получить доступ к данным. У вас будет соблазн сбить замки, когда у кого-то возникнут проблемы с доступом. Не делай этого.
  3. Ползти
  • Храните все необработанные данные в сегменте, доступном только для чтения для большинства пользователей. Предоставляйте разрешения на запись только тому ресурсу или пользователю, который добавляет новые необработанные данные как часть процесса. Организуйте общие файлы в их собственных каталогах (папках) и назовите их последовательно, в идеале с отметками времени.
  • Создайте корзину аналитики для обработанных и преобразованных данных. Данные здесь могут быть удалены или перезаписаны, но старайтесь, чтобы полезные вещи оставались стабильными.
  • Установите локальный доступ к S3 с помощью файла учетных данных. Не добавляйте свой ключ доступа и секретный ключ в код, даже если вы планируете удалить их перед тем, как поделиться. Для доступа к данным с использованием учетных данных вы часто будете использовать один из первых двух вариантов, описанных здесь. Это также отличный ресурс для настройки файла учетных данных и взаимодействия с S3 с использованием старого доброго python (boto3).
  1. Ходить
  • Убедитесь, что ваши файлы данных организованы в соответствии с общими схемами, т. е. каждый каталог содержит только файлы с одинаковой схемой (столбцами).
  • Настройте бессерверную базу данных, например Athena (AWS) или BigQuery (GCP), чтобы запрашивать данные непосредственно из хранилища с помощью SQL. Это устраняет узкие места, и вы платите только за то, что запрашиваете, в отличие от традиционной базы данных, которая работает постоянно.
  • Запросите Athena в Python с помощью boto3, чтобы загрузить в память только те данные, которые вам нужны.
  • Explore Glue (AWS) или Dataflow (GCP) для автоматизации преобразования данных.

2. Беги

  • Используйте Snowflake для вашей бессерверной базы данных и DBT для конвейеров преобразования. Это будет стоить немного дороже, чем нативные варианты AWS или GCP, но оно того стоит.
  • Прочтите этот раздел, если хотите знать почему, но это моя самая настоятельная рекомендация, если вы хотите делать это в больших масштабах. Вот основная ссылка, которую я использую для структурирования проектов DBT.

Часть 4

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

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

  1. Используйте GitHub, Gitlab или Bitbucket для своих репозиториев. Неважно какой, но выберите один и начните писать код вместе.

2. Используйте Python и SQL практически для всего.

  • Python — отличный язык программирования общего назначения и основной язык, используемый в машинном обучении. Если вы хотите использовать что-то другое, делайте это на свой страх и риск.
  • Делайте как можно больше с SQL. Он оптимизирован для преобразования и агрегирования данных. Это также сохранит ваши наборы данных организованными и доступными для всех.

3. Используйте виртуальные среды или контейнеры для управления зависимостями.

4. Создайте базу с помощью pandas, numpy, scikit-learn и вашей любимой библиотеки визуализации. При необходимости добавьте структуру глубокого обучения.

  • Pandas позволяет легко работать с данными в фреймах данных. Numpy предоставляет числовые операции, такие как генерация случайных чисел и выборка.
  • Визуализация данных важна, но не то, что вы используете. Matplotlib — это стандартная проблема, но я предпочитаю сюжетно.
  • Если вы хотите работать с изображениями или естественным языком, потратьте некоторое время на фреймворк глубокого обучения, такой как TensorFlow или PyTorch. Это может быть сложно изучить, но стоит усилий, если вам нужно глубокое обучение для решения вашей проблемы.