Пять веских причин, почему стоит пойти учиться на аналитика данных | Статьи SEOnews

Пять веских причин, почему стоит пойти учиться на аналитика данных | Статьи SEOnews Аналитика

Профессиональные компетенции аналитика данных: что должен знать dataanalyst

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

  • информационные технологии – методы и средства интеллектуального анализа данных (Data Mining) – языки программирования (R, Python и пр.) и SQL-подобные языки для написания запросов к нереляционным и реляционным базам данных, а также BI-системы, ETL-хранилища и витрины данных типа Tableau, Power BI, QlikView и т.д., а также основы инфраструктуры Apache Hadoop;
  • математика (статистика, теория вероятностей, дискретная математика);
  • системный анализ, управление качеством, проектный менеджмент и методы анализа бизнес-процессов (подходы бережливого производства, SWOT, ABC, PDCA, IDEF, EPC, BPMN, ССП и пр.).

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

что должен знать аналитик данных data analyst
Области знаний для аналитика данных

Специфика BigData добавляет к этим базовым компетенциям Data Analyst еще навыки работы с озерами данных (Data Lakes), понимание вопросов информационной безопасности и управления данными (Data Governance), а также владение типовыми сценариями цифровизации (цифровой трансформации) и применения технологий больших данных в различных предметных областях (use-cases).

Все это и множество других практических знаний для аналитика данных мы рассматриваем на наших курсах обучения и повышения квалификации ИТ-специалистов в лицензированном учебном центре для руководителей, аналитиков, архитекторов, инженеров и исследователей Big Data в Москве:

Аналитик данных и data scientist: в чем отличие?

На первый взгляд профессии аналитик данных и data scientist могут быть похожи, да и во многих компаниях обязанности этих двух специалистов часто пересекаются. Центр непрерывного образования ФКН поговорил с Сергеем Юдиным, руководителем группы качества discovery-сценария в поиске Яндекса, об особенностях работы в каждой из профессий. В интервью Сергей рассказал о необходимых навыках и перспективах профессий и о том, как сделать беспрецедентным преимуществом свой предыдущий опыт. 

Чем ты занимаешься?

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

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

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

Есть две специальности: аналитик данных и data scientist. Расскажи, чем занимаются те и другие.

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

Data scientist’ы тоже встречаются там, где есть данные, но важное и необходимое условие появления в команде data scientist’а — это наукоёмкая задача вокруг данных. Необязательно должны быть пользователи, но данные — обязаны быть. 

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

Между этими двумя профессиями нет чёткой грани, это скорее спектр. В Яндексе аналитик-разработчик зачастую является тем же самым data scientist’ом, если он работает с методами математической статистики, машинного обучения или оптимизации. Но аналитик — это очень прикладная специальность. Основная задача любого аналитика данных — получить из этих данных пользу для бизнеса, продукта или людей. 

А data scientist в первую очередь scientist, то есть ученый, который должен заниматься исследованиями. Зачастую в классическом понимании data science — это наука о данных, а раз это наука, то можно сказать, что KPI такого человека — это продвижение науки вперёд, например, через написание статей. Data-scientist’ы придумывают новые методы, их применение и рассказывают об этом миру. 

Я использую не общепринятую терминологию, как на рынке труда, а некое словарное определение профессии, которое можно очень сильно расширять. Когда я говорю про то, что задача data scientist’а писать статьи — это, естественно, некоторая полярность. Интереснее рассмотреть именно полярности, потому что в реальности есть множество людей, которые одновременно занимаются и задачами аналитика, и тем, что можно назвать data science. 

Что ты понимаешь под «наукоемкими методами»?

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

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

Можно сказать, что в одному углу стоят как раз исключительно теоретические задачи, не используемые на практике. А в другом — задачи обработки данных, за которыми не стоит особой науки: можно просто взять данные, сгруппировать, посчитать среднее, отсортировать и сделать аналитический вывод.  Где-то на стыке и лежат те самые методы, которые называют «наукоёмкими».

Можешь на конкретных примерах рассказать, чем занимаются аналитики?

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

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

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

Дополнительный анализ:  Вакансия Специалист технической поддержки (Intercom) в Санкт-Петербурге, работа в компании Бсп

У нас были логи действия пользователей в этом эксперименте: история запросов, клики и другие взаимодействия. Задача аналитика в данном случае — разобраться в том, что произошло. Правда ли новый элемент ухудшает качество выдачи? В нашем случае выяснилось, что пользователи стали реже кликать именно в тот момент, когда на выдаче был всего лишь один элемент с картинкой. Мы предположили, что одна картинка отпугивает пользователей, потому что выглядит чужеродной. Когда в выдаче картинок несколько пользователям проще визуально её воспринимать.

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

Какими навыками должны обладать аналитик?

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

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

Простой пример когнитивного искажения – эффект привязки. Когда-то два учёных Амос Тверски и Даниэль Канеман провели эксперимент: испытуемых в двух группах просили оценить долю африканских стран в ООН. Только в первой группе вопрос задавали следующим образом: «Доля африканских стран в ООН больше или меньше 65%?» И второй вопрос: «Сколько на самом деле процентов составляет доля африканских стран?». Второй группе задавали аналогичные вопросы, только в первом вместо 65% подставляли 10%. Несмотря на то что второй вопрос не отличался, а группы были случайными, результаты статистически очень сильно различались. Медианный ответ в первой группе составлял 45%, а у второй группы – 25%. Ответ на второй вопрос испытуемые давали под сильным влиянием от формулировки первого. 

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

А какими навыками должен обладать хороший data scientist?

Любой data scientist – это аналитик, но не любой аналитик – data scientist, поэтому всё, что мы сейчас сказали, к data scientist’у точно относится. В дополнение, это, конечно же углублённые математическая подготовка и понимание статистических методов, а также всё, что связано с работой этих алгоритмов на практике. Методы компьютерного анализа данных построены на линейной алгебре, математической статистике и компьютерных науках. Должно присутствовать базовое понимание каждой из этих областей. 

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

В каких компаниях могут работать такие специалисты?

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

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

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

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

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

Насколько перспективны эти профессии?

Потребность как в data-аналитиках, так и в data scientist’ах, растет не арифметически, а геометрически. Впрочем, как и количество данных компаний, мощность и стоимость некоторых кластеров, в которых можно применять сложные методы и хранить данные. Пока что тенденция такова, что геометрический рост продолжится ближайшие несколько лет. 

Другое дело, что есть перекос в сторону специалистов с некоторым опытом, чем с джуниор-уровнем. Компании в поисках тех специалистов, которые уже сталкивались с аналогичными задачами и умеют их решать. 

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

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

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

Можно войти в профессию с нуля?

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

Для аналитиков она меньше, чем для data scientist’ов. Аналитик может начать решать задачи уже с базовыми знаниями. Для некоторых сложностью может стать то, что до устройства на полный рабочий день возможно придётся пройти стажировку, позаниматься своими собственными pet project’ами и загореться этой индустрией. Настолько загореться, чтобы быть готовым даже самостоятельно, в качестве хобби искать данные и их исследовать. Вот в таком случае с нуля точно можно войти в профессию. 

Дополнительный анализ:  Блок ПО Аналитики - Старт

Надо набивать руку на написание кода до выхода на первое место работы, потому что программирование – это третий иностранный язык, который нужно знать. Те же самые pet project’ы или соревнования могут этому очень сильно поспособствовать. 

С какими сложностями можно столкнуться в работе?

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

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

Другая сложность – это коммуникация. Профессия аналитика и data scientist неотрывно связаны с общением с людьми. Data scientist может работать в вакууме с отдельной задачей, которую он будет решать полгода, а потом представить результат. Но зачастую и у людей, занимающихся, например, практическими применениями алгоритмов, возникает потребность общаться с той частью, у которой они будут брать данные. Сейчас есть тенденция разделения на тех, кто исследует что-то и проверяет гипотезы, и тех, кто это потом встраивает. И нужно объяснить, как это всё встроить и разработать.

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

Подводя итог, какие ключевые различия между аналитиком данных и data scientist’ом?

Аналитик данных – человек, который из данных получает практическую пользу. Data scientist – это человек, который умеет применять сложные методы обработки данных и понимает, как они устроены. Во многих компаниях эти профессии очень сильно пересекаются. 

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

Освоить обе профессии с нуля можно в центре непрерывного образования факультета компьютерных наук

Изучить базы данных и язык SQL, язык Python, его применения для сбора, визуализации и анализа данных, статистику и машинное обучение, а также аналитические и продуктовые подходы для работы над реальными задачами можно на программе профессиональной переподготовки «Аналитик данных».
На программе «Специалист по Data Science» вы погрузитесь в современный анализ данных и машинное обучение: от изучения программирования и базовых разделов математики до глубинного обучения, прикладной статистики и работы с большими данными.

Как проходит онлайн-обучение дата-аналитике

Я учился на 11 онлайн-курсах по дата-аналитике. Один из них проходил напрямую у создателя — Высшей школы бизнес-информатики. Остальные нашел на образовательных платформах «Курсера», «Стэпик», «Скиллбокс», «Дата-кэмп» и «Яндекс-практикум».

На всех платформах я выбирал отдельные курсы. Только на «Дата-кэмпе» оплатил сразу годовую подписку и мог проходить по ней любые курсы.

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

Кто преподавал. Курс в Высшей школе бизнеса вели преподаватели самой школы, а в «Яндекс-практикуме» — аналитики «Яндекса». На других платформах курсы создали преподаватели университетов, колледжей и бизнес-школ и сотрудники крупных успешных компаний.

«Скиллбокс» сам набирает команду преподавателей. На курсе «Профессия Data Scientist: анализ данных» лекции читали сотрудники «Рамблера», «Профи-ру», Сбера и самого «Скиллбокса».

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

Формат занятий. Курсы включали в себя теорию в виде лекций — текстовых или в формате видео. И практику — тесты и домашние задания. Смотреть лекции и сдавать тесты я мог в любое время, хоть ночью. Главное — успевать все делать в пределах модуля. На «Яндекс-практикуме» модуль длился 2 недели, на остальных платформах — неделю.

За тесты мне начисляли баллы. Потом из них складывалась итоговая оценка. В основном тесты проверяли преподаватели, только на Data Science Professional Certificate на «Курсере» это делали такие же студенты, как и я. Мне это не понравилось.

Так выглядел тренажер «Яндекс-практикума». Аналогичный был на «Дата-кэмпе»

Качество. Некоторые курсы были очень качественно сделанными, с хорошим планом занятий и интересными практическими заданиями. Например, на «Курсере» мне понравился курс «Основы программирования на Python». Другие курсы были непродуманными: они не казались цельными, потому что из раза в раз менялся формат лекций. Таким был курс «Профессия Data Scientist: анализ данных» на «Скиллбоксе».

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

Сертификат курса IBM, который я прошел на «Курсере»

Я оценю полезность каждого курса по шкале от 1 до 10 баллов, где 1 — совсем бесполезно, а 10 — очень полезно, интересно и применимо в новой работе.

Краткое техническое отступление

Давайте сознательно прервем повествование и остановимся на самих требованиях. Что касается видов, атрибутов, характеристик, подходов к сбору и оформлению требований – пожалуй, большего «бардака» сложно найти. Состав и содержание документов с требованиями существенно различаются (взять, к примеру, наш ГОСТ и RUP, и имхо это не сравнение пушки и рогатки).

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

Не претендуя на истину в последней инстанции или какое-то ноу-хау (примерно то же написано в Википедии), сформулируем два ключевых способа классификации требований.

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

Данные требования обычно описываются в отдельном документе — «Видении проекта» (Vision) или «Бизнес-требованиях», который так же включает определение основных ролей будущих пользователей Системы и перечисление ее основных сценариев использования.

Требования пользователейОни определяют набор пользовательских задач, которые должна решать Система, с описанием сценариев решения данных задач. Требования пользователей обычно представляются в виде перечисления вариантов использования Системы и взаимосвязей между ними (как правило, в виде Use-case диаграммы языка UML).

Сами варианты использования описывается в виде составляющих их последовательностей действий со всеми возможными пред/постусловиями и ветвлениями. Часто описание является текстовым (эта тема хорошо описана в книге Алистера Коберна ” Современные методы описания функциональных требований к системам “).

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

Дополнительный анализ:  На российском рынке электронных платежей лидируют банковские карты. Обзор: ИТ в банках и страховых компаниях 2013 - CNews

Функциональные требования являются наиболее детализированными. Они описывают, в том числе, входные/выходные данные и их проверки, алгоритмы обработки данных и элементы пользовательского интерфейса (без дизайна).Как правило, данные требования оформляются в виде отдельного документа («Технического задания» и т.д.).

В этом же документе детализируются сценарии использования Системы (Требования пользователей), к которым обычно и привязываются функциональные требования.Пример функционального требования: «По клику на кнопке <Кнопка А> на форме <Форма Б> должно отображаться модальное диалоговое окно, содержащее <Содержание окна>».

По типу:Функциональные требованияОписывают непосредственно функционал, реализуемый Системой (пример приведен выше в описании классификации требований по их уровню в пункте «Функциональные требования»);

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

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

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

Последовательность работ и их результатовСледует четко различать результаты этапов анализа и проектирования. На этапе анализа формируются требования к Системе.Все детали реализации Системы определяются уже на следующем этапе – этапе проектирования.

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

Однако некоторые отступления, такие как включение в «Техническое задание» спроектированных макетов интерфейса (без дизайна/оформления), допустимы, т.к. выполняются теми же людьми, которые разрабатывают само техническое задание.

Порядок сбора самих требований:

  1. Сначала выявляются цели создания Системы (бизнес-требования). Может сложиться впечатление, что фиксация данных требований не является обязательной для разработки. Но в этом случае у Исполнителя не будет возможности контролировать соответствие разработанной Системы тем целям, для которых она создавалась, а так же – возможности устанавливать семантические зависимости между целями разработки системы и сценариями ее использования;
  2. Далее определяются роли пользователей Системы (как людей, так и других программных систем). После этого выявляются и описываются сценарии использования Системы каждой из данных ролей. Так формируются Требования пользователей.
  3. Далее разрабатывается полный набор требований к функционалу Системы таким образом, чтобы данный функционал позволял выполнить все сценарии, описанные в Требованиях пользователей. Так же фиксируются ограничения для Системы и параметры среды ее функционирования.

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

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

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

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

Во втором случае имеются в виду:

  1. заинтересованные лица
  2. эксперты предметной области
  3. лица, участвующим в согласовании и утверждении требований
  4. технические специалисты со стороны заказчика либо других подрядчиков/субподрядчиков.

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

Решение


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

$n$

— длина ребра квадратной сетки. Тогда общее число возможных маршрутов:

Вывод формулы описан

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

$n$

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

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

Как только я сделал рисунок, понял, что намного проще будет отследить маршруты, реку не пересекающие, а именно маршруты ниже реки. Затем можно будет умножить их число на 2, учтя таким образом и зеркальные маршруты выше реки. Так как мы знаем вдобавок и общее число маршрутов, найдём и количество пересекающих реку. Но вернёмся к главной задаче — нам нужна зависимость между $n$$n$

Новые пути я отметил красным. Итак, понятно, что если путник свернёт на левое и затем верхнее ребро клетки (1, 0), ему далее будут доступны лишь 2 из трёх путей через клетки с горизонтальной координатой 2, ведь двигаться можно лишь вверх и вправо — третий же путь лежит ниже.

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


Крайний правый столбец вновь даёт нам

$n$

маршрутов. Верхнее ребро клетки (2, 0) добавит нам

$n-1$

маршрут. Верхнее ребро клетки (2, 1) добавит

$n-2$

маршрута. Верхнее ребро клетки (1, 0) добавит столько маршрутов, сколько добавили клетки (2, 0) и (2, 1) вместе. При желании можно нарисовать сетку побольше и продолжить считать маршруты тем же алгоритмом. Наша задача — подсчитать маршруты для сетки 100×100. Для этого можно написать программку, которая примет на вход

$n$

и построит матрицу

$ntimes n$

, начиная со столбца

$n$

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

Код
import numpy as np
import math

def routes_total(n): # Общее число путей
    return math.factorial(2*n) / (math.factorial(n)**2)

def fill_matrix(n): # Число путей, не пересекающих реку с одной стороны реки
    net = np.zeros((n, n)) 
    net[0, 0] = n # Крайний столбец даёт n путей
    for i in range(n-2):
        net[1, i] = n - i - 1 

    for i in range(2, n):
        for j in range(n - i - 1): 
            net[i, j] = 0
            for g in range(j, n - i   1):
                net[i, j]  = net[i - 1, g]
    
    # Сумму полученных чисел умножаем на 2, чтобы учесть другую сторону реки
    return (2 * sum(sum(net))) 

# Хотим долю пересекающих реку путей - вычитаем результат из 1
print(1  - fill_matrix(100) / routes_total(100))

Оцените статью
Аналитик-эксперт
Добавить комментарий

Adblock
detector