Анализ спроса и предложения фрилансеров на примере биржи oDesk
Введение oDesk — крупнейшая в мире (ну по крайней мере так считает сам oDesk) международна биржа фрилансеров. Про сам оDesk на хабре писали уже довольно много раз, например тут или тут, где, на мой взгляд, практически разжёвано зачем и для кого создан данный ресурс, и особенно «с чем его есть». В связи с этим этап описания и принцип работы сайта можно опустить. Я же попытаюсь провести анализ данных как о самих фрилансерах, так и о заказах, заказчиках и их требованиях к фрилансерам — грубо говоря что нужно уметь и знать, чтобы быть более менее в теме современных технологий. Также проанализирую спрос и предложение на основе данных о навыках фрилансеров и требованиях клиентов. И конечно некоторые статистические данные и немного красивых картинок в качестве примеров (кто работает на oDesk, откуда в основном идут заказы, кто больше зарабатывает, а кто лучше работает и т.д.). И все это на основе самостоятельно собранной информации, так открыто и благородно предоставляемой самим oDesk«ом посредством API. Стоит отметить, что статья с небольшим количеством статистики про oDesk ранее уже успела промелькнуть на просторах хабра, однако в ней, в отличии от текущей статьи, oDesk сам себя хвалил предоставил результаты. В целом же, сразу хочу сказать, что не претендую на полноту обзора, однако ниже будет кратко описан процесс сбора данных, что позволит провести Ваш собственный анализ при необходимости.Как собирались данные При создании новой работы клиент обычно добавляет список необходимых навыков для её выполнения. Навыки могут быть самые различные (как знание языков программирования, так и знание операционных систем или обычных языков вроде русского или английского). Полный список в алфавитном порядке можно найти тут, всего на момент написание статьи около 2500 тысяч навыков. Кроме того свои навыки добавляют в профиль и фрилансеры. Таким образом свой сбор данных я и реализовал на основе информации о работах и фрилансерах по их навыкам. А точнее, сначала я с помощью API получил список всех навыков (для этого есть специальная функция), а потом в цикле по всем навыкам получил список работ и фрилансеров. На самом деле такой метод пропускает работы и фрилансеров у которых нет ни одного навыка, но мы просто будем считать, что такие работы нам не интересны так как клиент сам не знает чего он хочет, а фрилансеры не имеющие навыков или ленящиеся их добавить в описание своего профиля вряд ли будут хорошо работать. Исходный код консольного приложения, которое собирает данные и сохраняет их в базу данных, я разместил на GitHub.Немного о размере базы, которую удалось собрать. Всего около 500 000 фрилансеров, из которых более 200 000 выполнили хотя бы одну работу, а около 150 000 — отработали хотя бы один час. Более 50 000 открытых работ на момент написания статьи, при этом описание каждой работы в среднем включает около 5 навыков.
К сожалению, с помощью API я не получил доступ к финансовой информации, а точнее сколько реально тратят клиенты и сколько зарабатывают фрилансеры, однако и по косвенным признакам можно сделать некоторые оценки, например по информации о количестве отработанных часов и почасовой ставке фрилансеров (хотя это и не всегда верно, так как порой часовая ставка, указанная в профиле, может не соответствовать той, по которой фрилансер на самом деле работает).
Про страны Для начала коротко о странах, а точнее о том, в каких странах создаётся больше работ и из каких стран больше фрилансеров, ну и немного о том насколько хорошо это фрилансеры работает и как много просят денег.Следующая картинка показывает страны с наибольшим количеством работ (более интенсивный цвет означает большее значение, а подписи — абсолютные значения). В топ 10 стран входят: США, Австралия, Великобритания, Канада, Индия, Филиппины, Германия, Израиль, Сингапур, Пакистан в порядке убывания количества работ.
Следующая картинка показывает страны с наибольшим количеством фрилансеров. Топ 10 стран в порядке убывания общего количества работников следующий: Филиппины, Индия, США, Бангладеш, Пакистан, Украина, Россия, Великобритания, Канада, Румыния.
На следующей картинке приводится топ 20 стран по общему количеству отработанных часов фрилансерами этой страны. Соответственно в первой колонке таблицы приводится значение общего количества часов, во второй количество самих фрилансеров, в третьей — размер почасовой оплаты в долларах США, а в четвёртой рейтинг работников, который может принимать значения из отрезка от 0 до 5 (более высокий рейтинг означает, что клиенты были в большей степени довольны результатами работы). Стоит заметить, что для уровня почасовой оплаты и рейтинга подсчитывалась медиана, как более репрезентативный показатель в сравнении со средним значением. Ещё была мысль считать среднее арифметическое взвешенное, а в качестве весовых коэффициентов использовать общее количество отработанных часов, но мне эта идея нравится чуть меньше чем медиана, так как плохо отражает недавние изменения. Так например, если за последние полгода появилось много новых фрилансеров, которые хорошо работают, и имеют хороший рейтинг, но ещё не успели наработать много часов, их рейтинг не будет учтён должным образом.
Что же более востребовано, а что совсем не нужно Как было описано в начале, данные собирались на основе навыков указанных в описании работ и навыков, которые указывают сами фрилансеры. Теперь на основе этого попробуем провести небольшой анализ спроса и предложения.Часть данных мы исключим из дальнейшего рассмотрения — это навыки фрилансеров, на которые отсутствует спрос. Например, я хорошо отношусь к танцам, но совершенно не понимаю как фрилансеры собираются продавать этот навык на oDesk. Что забавно, 420 фрилансеров указали умение танцевать в своих профилях, однако довольно предсказуемо, что количество работ, требующих этот навык равно нулю. Кроме танцев также довольно часто указывают навыки самбо, мамбо или умение делать выпечку.
Чуть более интересно выглядят данные с отсутствующим предложением, в основном это знание языков: Норвежский (56 работы), Бенгальский (16) и Латышский (15) и другие языки. В целом, можно сказать, что на остальные запросы клиентов находятся исполнители с необходимыми навыками.
На следующей картинке приводится наглядная демонстрация 100 наиболее востребованных навыков (что составляет около 5% от общего количества навыков с учётом отброшенных из-за отсутствия спроса или предложения) встречающихся в описаниях работ. Цифровые значения соответствуют абсолютному значению количества работ, в которых встречается навык.
Следующая картинка отображает 100 наиболее часто встречающихся навыков в профилях фрилансеров (обозначения аналогичны использованным выше).
Логично что, навык представляет интерес, если спрос на него сильно превышает предложение и при этом спрос также имеет достаточно большое значение. То есть значимость навыка зависит от двух критериев:
1-й критерий: отношение спроса к предложению. 2-й критерий: частая встречаемость навыка в требованиях клиентов. Этот критерий основан на том, что если есть два навыка А и В, у А 100 работ (спрос) и 1000 фрилансеров (предложение), у В 200 работ и 2000 фрилансеров, то В все же будет более предпочтительным для изучения из-за бОльшего разнообразия работ для выбора, несмотря на одинаковое отношение спроса к предложению для обоих навыков. Предложенную идею можно выразить следующей формулой для оценки навыка: То есть более интересными навыками являются навыки с бОльшим значением R.Весовой коэффициент α введён для возможности варьировать значимость между 1-м и 2-м критериями. Если же попытаться добиться одинаковой в среднем значимости обоих критериев, то коэффициент α можно взять равным следующему значению:
Для более детального анализа навыков сфокусироваться нужно на каждой субкатегории отдельно, однако сейчас остановим свой выбор на веб программировании. При подходе, описанном выше, первые 30 навыков с наибольшим значением коэффициента R будут следующими (по оси Х откладываются значения R):
Если честно, меня такой результат немного сбивает с толку при первом рассмотрении, так как перечисленные навыки относятся к абсолютно разным вещам, что-то к фрэймворкам, что-то к каким-то абстрактным понятиям, 5 из 30 к знанию обычных языков (Английский, Китайский, Немецкий, Французский да ещё и грамматика английская), 3 из 30 к мобильным разработкам для iOS и Android. Кроме того, в навык «Writing» oDesk включает и «Content Writing», и «Technical writing», и «Creative writing», и «Article Writing», и «Blog Writing», и «Business Writing», и «Editorial Writing». Навык «research» тоже довольно обширный и подразумевает как сам «Research» так и «Internet research», и «Market research», и «SEO Keyword Research», навык «English» так же предсказуемо включает в сябя другие навыки в числе которых к тому же и умение переводить с английского на другие языки, под «Analytics» в основном имеется ввиду «Google Analytics», навык «c» к сожалению означает не только знание языка программирования С, но и языков С++, С# и Objective-C.
Для некоторой конкретности, я решил самостоятельно выделить из общего списка навыков то, что относится к языкам программирования и применить к ним описанное выше ранжирование, в итоге получилось следующее (по оси Х также откладываются значения R):
Может показаться, что предложение сильно превышает спрос, однако стоит учитывать, что собранные данные включают данные обо всех фрилансерах (и тех кто раньше работал, но просто не удалил свой профиль, и тех кто имеет работу на данный момент, и тех кто активно ищет новые проекты), а вот работы показываются только активные в данный момент и при нахождении исполнителя обычно закрываются, что не позволяет в точности сказать сколько фрилансеров в данный момент действительно ищут работу.
По поводу картинки выше, опять же стоит сделать уточнение, так как видно, что язык С# занимает лишь 6 место при используемом ранжировании, однако видно, что в топ 30 попала технология ASP (а если быть точнее, то этот навык в основном подразумевает ASP.NET или ASP.NET MVC), которая основана на использовании языка С# либо других языков входящих в комплект .NET Framework. Но при этом в топ 30 не попали технологии связанные с языками Ruby, PHP, JavaScript, Python и Java, которые обгоняют C#. Хотя с другой стороны для других языков существует большее разнообразие фрэймворков в отличии от C#, для которого выбор не велик. В целом все это лишь наталкивает на мысль проведения отдельного анализа технологий, используемых, например, для создания веб приложений, или сравнения других навыков из некоторой конкретной области. В качестве ещё одного примера я сравнил JavaScript библиотеки (заранее скажу, что практически вручную перебирал навыки, поэтому мог что-то пропустить и буду благодарен за уточнения):
Ну и в качестве последнего примера сравнение CMS:
Конечно общее сравнение всех навыков тоже представляет интерес, но для адекватности результатов лучше все же сравнивать навыки из одной области, а не знание китайского языка со знанием bootstrap как получилось чуть выше (столбчатая диаграмма с жёлтыми цветами и топ 30 навыками).
Заключение В ходе анализа возникли и некоторые трудности. Например, то, что API при поиске по навыкам осуществляет не точный поиск, а что-то вроде поиска по подстроке, что приводит к появлению С# или Objective-C при поиске С, хотя это разные языки программирования используемые для совершенно разных задач. Проверять все 2500 навыков вручную нет никакого желания, поэтому насколько много таких неточностей в работе API точно сказать не могу.Кроме того, проведённый анализ затрагивает данные только на момент написание статьи и не учитывает тенденций, которые позволили бы сказать, например, спрос/предложение по каким языкам программирования увеличивается, а по каким падает на бирже oDesk.
Если эта тема будет интересной, то подумаю над уточнением сбора данных и способом анализа тенденций.