Этапы анализа
- Препроцессинг данных и предварительный анализ (кому интересно код тут)
- Графическое представление данных. Функция плотности распределения.
- Формулируем нулевую гипотезу (H0) (2)
- Выбираем метрику для анализа
- Используем метод bootstraping для формирования нового массива данных
- Рассчитываем p-value (3) для подтверждения или опровержения гипотезы
Препроцессинг данных
После некоторых манипуляций (код тут), приводим данные в следующий вид:
# Строка здесь это отдельный результат опроса, колонки переменные.
display(data_14_1.head(), data_19_1.head())
print('Всего опрошенных программистов: \n {} чел. в 14 году и {} в 19 году'.format(len(data_14_1), len(data_19_1)))
Немного больше группировок для одного года (пусть 19-й):
# Группируем, считаем 19 год
display(pd.DataFrame(df.groupby(['Experience'])['Salary'].mean().sort_values(ascending=False)), pd.DataFrame(df.groupby(['Position'])['Salary'].mean().sort_values(ascending=False)), df.Position.value_counts())
Первые оценки такие.
а. По результатам видно, что в среднем в 19 году, те кто работает более 10 лет получает более 3.5к. Прослеживается зависимость стаж -> з.п.
в. Средние з.п. в 19 году, в зависимости от специализации показывают разброс в 10 раз — от 5к для System Architect, до 575 для Junior QA.
с. В последней табличке распределение по специальностям. Больше всего данных о Software Engineer, без указания уровня квалификации.
Обращаем внимание на особенности 19 года: Что-то не так с 9 годом стажа и отсутствует классификация по уровням junior, middle, senior. Можно глубже разобраться причинами outlier 9-го года. Но для данного анализа примем это как есть.
А вот с категориями — стоит разобраться. в 19 году Software Engineer 2739 человек (35% от всех) без указания уровня квалификации. Давайте посчитаем среднее и отклонения по тем, кто указал.
Получается, что средний опыт работы (кто его указал) для SE Junior год, с достаточно широким отклонением в один год. Больше всего опыта у SE Senior c так же большим отклонением в 2,4 года.
Если попытаться рассчитать Middle и использовать средний стаж у тех кто его указал, то для категоризации того кто его не указал, мы можем не верно кластеризировать всю выборку. Особенно сильно будем ошибаться на других специальностях (не SE and QA) т.е. данных слишком мало. Тем более их мало для сравнения с 14 годом.
Что можно использовать еще?
Давайте берем только уровень зарплаты как достоверный показатель уровня квалификации! (думаю будут несогласные).
Сначала строим как выглядит распределение по зарплатам для 19-го года.
Outliers значительное число после 6$k. Оставим диапазон ограничений [400 — 4000]. Любой программист должен получать больше 400 :)
df_new = data_19_1[(data_19_1['Salary'] > 400) & (data_19_1['Salary'] < 4000)]
sns.distplot(df_new['Salary'], rug=True, norm_hist=True)
Уже чуть ближе к нормальному распределению.
Составляем для 19 года, уровни квалификации в зависимости от зп. Range в 3600$ дает нам хороший делитель на 3 категории — 1200 $
df_new.reset_index()
df_new.loc['level'] = 0
df_new.loc[df_new.Salary <= 1200, 'level'] = 'Junior'
df_new.loc[(df_new.Salary > 1200) & (df_new.Salary <= 2400), 'level'] = 'Middle'
df_new.loc[df_new.Salary > 2401, 'level'] = 'Senior'
Рисуем — плотность распределения по категориям для 19 года.
sns.set(style="whitegrid")
fig, ax = plt.subplots()
fig.set_size_inches(11.7, 8.27)
plt.title('Распределение зарплат по уровню квалификации в 19 году')
sns.barplot(x='level', y='Salary', hue='Experience', hue_order=[1,3,5,7,10], palette='Blues', data=df_new, ci='sd')
Добавив указанное количество опыта (левый угол), можно увидеть разные нюансы. Например, что в среднем Junior получает до 1к и его опыт работы — 5 лет. Самые большие разбросы по зп у Senior (черная короткая линия на верху каждого столбца) и многое другие интересные детали.
На этом первые два этапа закончены, переходим собственно к проверки гипотез при помощи бутстрапинга.
Формулируем нулевую гипотезу (H0)
На первых этапах мы выяснили, что указанный опыт работы, не очень точно означает уровень квалификации. Тогда формируем нулевую гипотезу (ту самую которую нужно опровергнуть)
Тут много вариантов (например):
- Зависимость зарплаты от стажа в 14 году такие же как в 19-м.
- Зарплаты junior не изменились с 14 года.
Однако раз указанный стаж плохой индикатор, а расчет по отдельным категориям может запутать, то берем простой и более предметный вариант: Средний уровень зп в 14 году, такой же как в 19 году это наша нулевая гипотеза H0 (2).
То есть предполагаем, что зарплаты за 5 лет не изменились.
НЕ верность гипотезы, несмотря на всю ее очевидность, мы сможем точно проверить рассчитав P-value для нулевой гипотезы.
# Считаем среднии зп по всей выборке (14 и 19 года), рассчитываем доверительный интервал 95 %
mean_salary_14 = np.mean(data_14_1['Salary'])
conf_salary_14 = np.percentile(data_14_1['Salary'], [2.5, 97.5])
mean_salary_19 = np.mean(data_19_1['Salary'])
conf_salary_19 = np.percentile(data_19_1['Salary'], [2.5, 97.5])
diff_mean_salary = mean_salary_19 - mean_salary_14
Средняя зп в 14 году 1797$, где доверительный интервал 95% [300.0 4000.0]
Средняя зп в 19 году 1949$, где доверительный интервал 95% [300.0 5000.0]
Разница в средних зарплатах в 14 и 19 году: 152$
Метрика для анализа
Логично выбрать именно средние значения в качестве нашей метрики. Возможны и другие варианты, например медиана, что часто делают в случае значительного количества outliers. Однако средняя как оценка проста в понимании и тоже неплохо даст необходимое представление.
Пишем bootstrapping функцию.
# Функция для bootstraping
def bootstrap(data, func):
boots = np.random.choice(data, len(data))
return func(boots)
def bootstrapping(data, func=np.mean, size=1):
reps = np.empty(size)
for i in range(size):
reps[i] = bootstrap(data, func)
return reps
Рассчитываем нашу статистику.
# Объединяем 14 и 19 года вместе - что бы создать перемешанный массив данных
data = np.concatenate((data_14_1['Salary'].values, data_19_1['Salary'].values))
# Считаем среднее значение за 2 года
data_mean = np.mean(data)
# Создаем измененные массивы данных за 14 и 19 года, от значения зп отнимаем среднее и добавляем среднее обьеденненого массива
data_14_shifted = data_14_1['Salary'].values - np.mean(data_14_1['Salary'].values) + data_mean
data_19_shifted = data_19_1['Salary'].values - np.mean(data_19_1['Salary'].values) + data_mean
# Генерируем 10000 копий массивов используя нашу функцию, выбранную метрику
data_14_bootsted = bootstrapping(data_14_shifted, np.mean, size=10000)
data_19_bootsted = bootstrapping(data_19_shifted, np.mean, size=10000)
# Считаем разницу в средних в сгенерированных массивах. Что бы знать с чем сравнивать.
mean_diff = data_19_bootsted - data_14_bootsted
# Рассчитываем P value как доля суммы средних нашей сгенерированной через бутстрапинг выборки со средними к размеры самой выборки.
p_value = sum(mean_diff >= diff_mean_salary) / len(mean_diff)
print('p-value = {}'.format(p_value))
p-value = 0.0
Значения p-value до 0,05 считаются незначительными, а в нашем случае оно равно = 0. Что означает, нулевая гипотеза опровергнута — средние значения зарплат в 14 году и 19 году разные и это не случайный результат или значительное количество outliers.
Сгенерированные нами 10 тыс подобных массивов, в среднем не смогли получить в сумме большей таких ототожнений, чем непосредственно сами данные.
Хотя мы потратили много внимания на первые два этапа, мы сформулировали правильную гипотезу и выбрали верную метрику. В более сложных задачах, с большим количеством переменных, без таких предварительных этапов, аналитика может привести к неверной интерпретации. Не стоит их пропускать.
В результате нашего исследования уровня зарплат за 14 и 19 года, мы пришли к следующим выводам:
- Исходя из данных опроса, указанный стаж не совсем подходящий критерий для определения уровня зарплат и квалификации.
- Разделение на уровень квалификации точнее всего будет проводиться на основании уровня зарплат.
- Зарплаты программистов с 14 года по 19 выросли (в среднем на 8.5%) и это не случайный результат.
Спасибо за Ваше внимание. Буду рад комментариям и критике.
Источники
Комментарии (49)
kommari
01.09.2019 18:53Зарплаты программистов с 14 года по 19 выросли (в среднем на 8.5%) и это не случайный результат.
Поправку на инфляцию сделали? Реальное содержание заработной платы выросло или упало?Isildur
01.09.2019 19:27+2Инфляция доллара = 8.38% ($100 in 2014 is equivalent in purchasing power to about $108.38 in 2019)
kommari
01.09.2019 20:44-4Значит, во-первых не выросли, во-вторых скорее всего снизились, если инфляция считается напрямую, а не через продуктовую корзину — снизилась, потому что цены на продукты питания, топливо, ЖКХ в Украинской Республике взлетели не на 8%. Такие дела.
DrPass
02.09.2019 01:04потому что цены на продукты питания, топливо, ЖКХ в Украинской Республике взлетели не на 8%.
эээ… в долларовом измерении или в гривневом? О_о
95-й бензин, например, в 2013-м году стоил порядка 11 грн ($1,375), сейчас стоит около 28 грн ($1,12). Так уж ли и взлетели цены?kommari
02.09.2019 07:51-195-й бензин, например, в 2013-м году стоил порядка 11 грн ($1,375), сейчас стоит около 28 грн ($1,12). Так уж ли и взлетели цены?
А вы хитре-е-ц! Но с вами мы тоже разберёмся. Дело в том, что стоимость топлива зависит не только от состояния экономики самой Украины, но и от цен на мировом рынке. А они с 2013 года по 2019 очень изменились. Смотрим сколько сейчас стоит бочка? 60 баксов примерно. Сколько стоила в 2013? Около сотни.
Теперь смотрите за руками. Когда в последний раз бочка стоила 60 баксов? В аккурат после кризиса 2008 года, например в 2009, после чего цены опять поползли вверх.
Сколько стоил 95-й бензин тогда? 6-7 гривен за литр? Доллар тогда стоил примерно 8 гривен. То есть литр стоил где-то 0.812$. Вот и сравните с современной ценой. Так уж ли она взлетела? По-моему, очень ощутимо. Но это и в наших европах так.
Лучше всего можно оценить расходы через электричество, например, потому что у Украины есть постоянные генерирующие мощности АЭС, и стоимость электроэнергии не зависит так сильно от внешних поставок.
C 2015 года гривна не дешевела в три раза к доллару, колебания 10-20%. Но вы можете посмотреть на сколько выросли тарифы на электроэнергию для домохозяйств (подсказка: в разы).
Так же по продуктам питания:
P.S. Минусующим. Я за истину и адекватную оценку, при этом мне на ваши русско-украинские тёрки болт класть. Я что ваших украинских жуликов ненавижу, что российских одинаково сильно. Это жульё даже сказки своему электорату рассказывает одинаковые про вставание с колен, только акценты разные делает, но суть одна и та же: «затянуть пояса и потерпеть, тогда заживём, а пока что можно помастурбировать на статистику».esc
02.09.2019 08:32Почему вы постоянно говорите о гривнах, если в статье все в $? И таблицу берете почему-то до 2015 года.
Я за истину
Брехняkommari
02.09.2019 08:57Гривна меня вообще не интересует как точка отсчета, я везде считаю от доллара. Даже автор статьи согласился, что не учитывал инфляцию доллара, которая за это время съела все повышение зарплат. Гривна тут вообще не нужна, но раз DrPass ее привел в расчете цен на топливо, то мне тоже пришлось.
Насчет таблицы до 2015 года, это то, что я нашел. Но вы можете не стесняется, и добавить сюда график цен на электроэнергию до 2019 года, например.
Брехня.
Ну вот, опять началось. Чуть речь зайдет о том, что в ваш маня-мирок не вписывается, так сразу запутинские пропагандоны. Вам не приходило в голову, что коммунисты могут ненавидеть как Путина с его олигархией, так и украинский олигархат?
esc
02.09.2019 09:40Давайте так, научитесь считать инфляцию доллара именно в Украине, то будет смысл ее обсуждать. Есть мнение, что за 14-19 год она была отрицательной т.к. цены на большинство услуг и некоторых товаров сильно снизилась в $. Но без понятной методики расчета это все вилами по воде.
По брехне. Вы намеренно взяли самое дно кризиса чтобы рассказать как в Украине все плохо. Ну наверное на ваш взгляд это объективно, но давайте все-же возьмем свежие данные.
index.minfin.com.ua/labour/salary/average
За июль 10971 грн или примерно 440$ по курсу на последний день июля. И в эти цифры не входит 90% айтишных зарплат (которые практически всегда выше этих 440$) и процентов 80 зарплат выше 1000$.
Потому, что там используется другая форма оплаты (или конверты для остатка после 4200грн для совсем наглых).
kommari
02.09.2019 10:44Давайте так, научитесь считать инфляцию доллара именно в Украине, то будет смысл ее обсуждать. Есть мнение, что за 14-19 год она была отрицательной т.к. цены на большинство услуг и некоторых товаров сильно снизилась в $. Но без понятной методики расчета это все вилами по воде.
А, ну так-то да. Мы тут в наших еврозонах привыкли по другому думать.
По брехне. Вы намеренно взяли самое дно кризиса чтобы рассказать как в Украине все плохо. Ну наверное на ваш взгляд это объективно, но давайте все-же возьмем свежие данные.
А, извините, не понял вашу претензию сразу. Я не хочу показать, «как на Украине плохо». Плохо — везде, где профсоюзы не стучат кулаком по столу работодателя (а это и Украина, и Россия, и Казахстан, и Гаити). Этой картинкой хотел показать не какие сейчас «средние зарплаты на Украине», а о том, что цены на продукты выросли. Что-то мне подсказывает, что они продолжили расти и после 2015 года. И правда, если погуглить — выросли. Вообще, я тут на том же вашем сайте нашёл занятный график по годам, показывающий индекс реальной заработной платы:
index.minfin.com.ua/labour/salary/index
Этот график скорее подтверждает вашу точку зрения о том, что уровень жизни должен был вырасти, так как индекс реальной заработной платы вырос в 1.5 раза с 2010 года. Очевидцы этого не подтверждают, и я даже догадываюсь почему (трудовая миграция, реальная безработица, импортные товары типа лекарств, автомобилей и электроники, и далее по пунктам). Но пусть будет так.
Потому, что там используется другая форма оплаты (или конверты для остатка после 4200грн для совсем наглых).
О, да, это вообще песня. С этими особыми формами оплаты украинские программисты получали больше эстонских. Я своими глазами видел такой прикол, как местным контора платит 2000 евро, а зробитчанам с Киева 3.5 тысячи + на переезд. А всё почему? А потому, что местным с этих 2 тысяч нужно ещё налогов на 1.5 тысячи, чтобы здесь дороги ремонтировали, детские садики и школы работали, освещение улиц по вечерам было и так далее… А эти хитрожопые что в своём Киеве налоги не платили, что здесь. Работали через кипрскую дочку главной конторы, зарплата падала на карточку.
Хорошо что за жопу их взяли, и таких эффективных работодателей вздрючили, теперь в Таллине белые зарплаты по 3-3.5 тысяч евро у программистов, в чёрную и серую работать не принято.
Это, кстати, к вопросу, почему saipr удивляется о том, почему российские зарплаты меньше — украинские работадатели не стесняются сразу указывать серые/чёрные зарплаты на местных glassdoor'ах. Другое дело, что российский программист не может даже с лупой разглядеть, на что его налоги идут, так что возможно хотел бы тоже всю свою зарплату вместе с налогами забирать, но это отдельный разговор.esc
02.09.2019 11:32Очевидцы этого не подтверждают
Это смотря каких очевидцев брать. Ладно, прочий поток сознания не охота обсуждать.kommari
02.09.2019 11:56Ну, оно и понятно. Мы по «заданию партии» должны был проводить опрос среди местных трудяг, понаехавших с Украины. Так вот, к нам едут люди не из ДНР и ЛНР, а вполне себе с материка, с востока подаются обычно в РФ.
Среди всех вопросов (большая часть которых посвящена условиям труда в ЭР), есть вопросы на тему, как приехавшие украинцы оценивают экономическую ситуацию на Украине и ее перспективы, а также уровень доверия к власти.
Так вот, большинство описывает кратким емким словом «жопа», при этом они патриотизмом к России не пылают, власть проклинают.
Есть те, которые оценивают ситуацию как временные трудности, есть те, кто говорит что там хорошо, к властям относятся тоже хорошо — таких меньшинство, около 15%. Но ехать обратно не хотят ни те, ни другие.
Контингент в основном рабочий: доярки, слесаря, сварщики, строители и т.д. Есть бывшие АТОшники. Но попадаются и более образованные программисты и даже врачи.
accipiter
02.09.2019 11:47Это, кстати, к вопросу, почему saipr удивляется о том, почему российские зарплаты меньше — украинские работадатели не стесняются сразу указывать серые/чёрные зарплаты на местных glassdoor'ах.
Большая часть украинских программистов работает как предприниматели по контракту. Там налог низкий, да. Но они не имеют социальных гарантий. Есть компании, которые официально устраивают на работу. Зарплаты там не ниже. Сотрудников то переманивать надо. В конвертах же платят какие-то мелкие безымянные компании, но и условия работы там так себе.esc
02.09.2019 14:36А какие социальные гарантии получают в Украине те, кто имеют полноценную «белую» ЗП, а не работают как предприниматели.
accipiter
02.09.2019 15:32Очевидно же, что те, что в трудовом кодексе описаны. Из того, что я наблюдал:
1. Женщине проще уходить в декрет. За ней останется место. В принципе место держат и для «предпринимателей», но не всегда и не долго и вообще это зависит от конкретной ситуации.
2. Если происходит сокращение, то выплачивается определенное количество зарплат.
3. Уволить человека, потому что рожей не вышел, сложнее. Хотя если этот вопрос был поднят, то лучше валить из этой компании. Но есть вариант попросить отступные за то, что свалишь молча.
Это к социальным гарантиям не относится, но все же.
1. Банки тебе верят. Кредит взять без залога на много проще. Я имею ввиду суммы до 1 млн грн.
2. Виза в любое государство оформляется очень просто, достаточно справку с места работы принести со своим доходом и все.
3. Командировка оформляется просто как командировка, а не как поездка туристом. Кстати тут еще есть неудобство с п. 2. Обычно этот вопрос решает компания, но не всегда. И врать нужно на границе, что ты турист.
Eсли есть два одинаковых оффера, но один как предприниматель, а другой — как сотрудник компании, то зачем соглашаться на предпринимателя?
кто имеют полноценную «белую» ЗП, а не работают как предприниматели.
Я считаю, что любой доход, с которого заплатили налоги — «белый». «Серый» — это зарплата в конвертах. Для меня трудоустройство в штат компании, а не как предприниматель — это просто бонус, как и медицинская страховка.esc
02.09.2019 16:40+1Пока на рынке есть дефицит кадров, причины 1,2,3 мало волнуют работников. Работодатеь не заинтересован в увольнениях подходящих (прошедших испытательный срок) сотрудников.
Исключение разве что для декрета. Но и вероятность найти работу с устройством в штат у девушки будет меньше, чем если устраиваться как предприниматель.
Кроме того, очень многие сотрудники с белыми ЗП работают на контракте, который им могут и не продлить. Не будет ни компенсаций при сокращении (которых и так может не быть, не знаю закона который это регламентирует) и уволить просто — не продлить контракт.
Банки и визовые центры давно понимают ситуацию с предпринимателями и зарплатами. Равно как и со справками, которые можно запросто нарисовать какие угодно. Смотрят наличие или даже движение денег на счетах, а не справки.
Если есть 2 одинаковых оффера, то компания которая платит в белую переплачивает примерно 50% (если взять и непрямые затраты). То есть велика вероятность найти работу где хотя бы часть от этих 50% будут выплачивать деньгами (по крайней мере, в IT).
И большинство работиников деньгами брать и предпочитая, не сильно веруя в соц. гарантии от государства.accipiter
02.09.2019 17:33Не будет ни компенсаций при сокращении (которых и так может не быть, не знаю закона который это регламентирует)
«працівникові виплачується вихідна допомога у розмірі не менше середнього місячного заробітку»
zakon.rada.gov.ua/laws/show/322-08 ст. 44
Банки и визовые центры давно понимают ситуацию с предпринимателями и зарплатами.
На своей шкуре прочувствовал, что работа в штате компании очень сильно все упрощает. Просто попробуйте взять кредит более 500 тыс грн без залога.
Если есть 2 одинаковых оффера, то компания которая платит в белую переплачивает примерно 50% (если взять и непрямые затраты). То есть велика вероятность найти работу где хотя бы часть от этих 50% будут выплачивать деньгами (по крайней мере, в IT).
Вы правы. Но я получаю выше рынка работая в штате компании. Когда получу предложение с большей оплатой и на интересный проект, но предпринимателем, то перейду на такую схему. Я тоже предпочитаю деньги.
В первоначальном комментарии я хотел лишь описать, как обстоят дела в Украине с трудоустройством в IT. Что не все получают в конвертах. А спорить, что лучше, я думаю, не стоит.
DrPass
02.09.2019 18:111. Банки тебе верят. Кредит взять без залога на много проще. Я имею ввиду суммы до 1 млн грн.
2. Виза в любое государство оформляется очень просто, достаточно справку с места работы принести со своим доходом и все.
По этим пунктам, кстати, нет никакой разницы, предприниматель ты или нет. Доход у предпринимателя тоже ведь прекрасно подтверждается.
Eсли есть два одинаковых оффера, но один как предприниматель, а другой — как сотрудник компании, то зачем соглашаться на предпринимателя?
Неоднозначный вопрос. А зарплата там одинаковая «чистая» или «грязная»? Если «грязная», то лучше предпринимателем, как по мне. Если «чистая», ну, я бы предпочел поговорить с работодателем, чтобы оформили как предпринимателя, и я бы получал больше на руки.
Просто по здравому смыслу, 5% налога платить всяко лучше, чем 19.5% (это не считая 22% начислений на ФОТ, которые платит работодатель, и которыми он тоже охотно с вами может поделиться), получая за это некие мифические социальные гарантии, которые неизвестно когда пригодятся, и пригодятся ли вообще.
saipr
02.09.2019 19:57к вопросу, почему saipr удивляется о том, почему российские зарплаты меньше
Я не удивляюсь, я знаю!
российский программист не может даже с лупой разглядеть, на что его налоги идут
Как вы тут правы!
так что возможно хотел бы тоже всю свою зарплату вместе с налогами забирать
При нашей коррупции это было бы справедливо. Только, подчеркну — со всеми налогами!
DrPass
02.09.2019 11:50Вам не приходило в голову, что коммунисты могут ненавидеть как Путина с его олигархией, так и украинский олигархат?
Эм… ну что же вы сразу не сказали, что вы лицо с ярко выраженной нетрадиционной политической ориентацией? Я бы просто не стал бы тратить на вас время.
Dim0v
02.09.2019 09:53C 2015 года гривна не дешевела в три раза к доллару, колебания 10-20%. Но вы можете посмотреть на сколько выросли тарифы на электроэнергию для домохозяйств (подсказка: в разы).
А каким боком тут 2015 год? Вроде как с 2014 сравниваем, не? В начале 2014 года 1 кВт*ч по максимальному тарифу стоял $0,156. В 2019 — $0,0672. По минимальному тарифу — $0,036 в 2014 против $0,036 в 2019. Не подскажете, где именно здесь искать "разы", о которых вы говорили? Точнее разы то я вижу, но только вот эти разы не про рост, а про падение цены.
То, что они выросли "в разы" по сравнению с 2015 годом, говорит лишь о том, что в 2015 году электричество было "в разы" дешевле. А потом цена вернулась к норме (а на самом деле даже ниже, если уже считаем в долларах).
pod
02.09.2019 18:36так зарплаты считались в долларах, а в гривна, вместе с ростом цен, падала к доллару, примерно в 2 раза с 2014. а если все — и цены и зарплаты — перевести в баксы, то зарплаты как минимум не снизились
VolodymyrGavrysh Автор
01.09.2019 21:06+1Вы правы — инфляцию доллара не учитывалась. По моей информации в США примерно она 2% в год.
Но как сравнивать? Инфляция в нац валюте намного выше.
Можно посчитать по паритету покупательной способности — сделать коррекцию.
Однако это тоже не совсем коректно т.к. расходы большинства — в национальной валюте.
Для простого анализа, мне показалось достаточным такое упрощение. Для более серьзного, нужно конечно учитывать.
Спасибоw3ga
02.09.2019 09:19по факту это не столь важно, если ты живёшь не в США, а зп получаешь в долларах, и инфляция в твоей стране превышает инфляцию США (а это очевидный факт для всего постсоветского пространства), то ты всё равно в плюсе.
CheY
01.09.2019 23:33При формулировании H0 совершенно неправильно посчитан доверительный интервал. Перцентили в выборке это совсем не то же самое, что доверительный интервал оценки среднего.
Также алгоритм бутстрепа странный… В оригинале делается N выборок из объединения ваших изначальных выборок. Мы пытаемся получить приближение распределения выбранной нами статистики при справедливости H0. Поэтому мы сэмплируем 10000 раз len(data) сетов из data. Затем берём из каждой семплированной выборки первые len(data_14) и следующие len(data_19) и считаем нашу статистику на этих данных — разницу средних в нашем случае. Спустя 10000 раз мы получим распределение. И далее уже на нём смотрим, какой шанс был получить такое же или большее значение статистики (т.е. p-value).
И вас чисто интуитивно не смущает, что при столь близких средних, довольно большом разбросе значений и не гигантских выборках вы получили p-value столь маленьким (а по сути равным 0 на 10000 бутстрапированных выборок)?VolodymyrGavrysh Автор
02.09.2019 13:09Спасибо.
Вы правы доверительный интервал нужно было считать после бутстрапинга. его сравнение до — не верное.
Касательно, самого способа бустрапинга.
Насколько я вас понял — этот вы предлагаете метод бутстрапинг: смешивание (permutration)
Видел такой способ. Когда мы смешиваем выборки на этапе самого бутстрапинга выбирая из данных отдельные элементы (тут два варианта, вы знаете inplace).
Давайте попробую отдельно расчитать по этой схеме посмотрим разницу.
Надо только время найти )
CheY
02.09.2019 15:42Ещё само предположение о независимости выборок можно поставить под сомнение. Сколько человек из 4к в 2014 поучаствовали в опросе в 2019 и попали в 8к? С учётом того, что опрос наверняка вёлся среди пользователей этого портала, что само по себе уже ставит под сомнение независимость выборок. Ведь для тех, кто принял участие в оба года, можно предположить, что за 5 лет их доход сильно вырос. А это нарушает предположение о независимости наблюдений.
Cekory
02.09.2019 00:15+1Средняя зп в 14 году 1797$, где доверительный интервал 95% [300.0 4000.0]
Средняя зп в 19 году 1949$, где доверительный интервал 95% [300.0 5000.0]Не совсем понятно, как получились значимые различия, если один доверительный интервал вложен в другой.
VolodymyrGavrysh Автор
02.09.2019 13:10Поскольку считалась средняя за год, посчитал нужным указать интервал. Но исходя из темы и задачи — это не верно. + уже понял что сравнивать так доверительные интервал не корректно
A114n
02.09.2019 11:28Уже чуть ближе к нормальному распределению.
Зарплаты не подчиняются закону нормального распределения. Даже в Северной Корее это логарифмический показатель.
При анализе зарплат нужно либо выявлять нормально распределённые кластеры (например можно обнаружить нормальное распределение зарплат у программистов с определённым стажем в определённой местности, пишущих на определённом языке), либо дробить на квартили, либо сравнивать медианы (а не средние).
Про разницу между доверительным интервалом и процентилями тут выше написали. Я просто не понял, что вы хотели сделать и почему вы его считали именно так, видимо не я один.
Возможно правильнее было сначала сделать бутстраппинг, а потом считать интервал.VolodymyrGavrysh Автор
02.09.2019 13:15Очень верное замечание. В коде собственно это показал на графике за 19 год.
просто дальше решил не углублятся в детали т.к. уже выходит за рамки задачи.
Касательно доверительных интервалах — это ошибочно было сравнивать их до бутстрапинга. Замечание принимается
disputant
02.09.2019 18:55«Любой программист должен получать больше 400 :)»
Только не в академии наук Украины. Тут у нас такую зарплату даже старший научный сотрудник не получает…
P.S. Вопрос не в квалификации, а в том, где и как пристроиться… У меня на ruStackOverflow «золото» по C, C++, алгоритмам — только вот давно бросил попытки найти работу программистом. Везде нужны очень конкретные знания очень конкретного фреймворка сразу, разговорный английский (зачем?!) + возраст до 30 с опытом работы лет 20… Знание математики и алгоритмов, похоже, рассматривается как большой минус :)
P.P.S. Мне 56 :)Static_electro
03.09.2019 08:41Вы либо зачем-то пытаетесь податься в веб со своими "не веб-ориентированными знаниями", либо проблема в другом.
Даже в аутсорсинговых галерах на возраст мало смотрят и работы для C++ программиста достаточно. Мало смотрят == удивятся, потому что редкость.
Другое дело, что знать алгоритмы и математику — хорошо, но надо уметь писать код на том же С++ (или С).
saipr
Можно позавидовать украинским программистам.
И если это не случайный результат, значит они будут расти.
А что с зарплатами наших, российских, программистов? Можно провести такой же анализ?
Мое впечатление такое, что зарплата остается в рублях постоянной, а с учетом инфляции и т.п. ее покупательная способность падает.
lamerok
Есть же обзор на Мой круг. https://m.habr.com/ru/company/moikrug/blog/461855/?utm_content=massmailing_news
VolodymyrGavrysh Автор
Хорошая статья. спасибо
saipr
Спасибо, что напомнили. Прочитал. Еслия все правильно понял, то к сожалению сравнение не в нашу пользу.
MacIn
К сожалению, в таких исследованиях нет разбивки по «местным» вакансиям и удаленным, что делает такое сравнение бессмысленным. Если условный украинский программист работает на Голландию, то нет никакого резона его сравнивать с посконным Васей, работающим в российском НИИ.
saipr
Ну условный русских программист, работающий на Голландию, есть и в России.
slav1k
На Украине на забугор, так или иначе, работает большинство программистов, а высококвалифицированные почти все. Внутренний рынок намного меньше российского и по объему и в процентном отношении.
saipr
А вы посмотрите, что используется или что ненавязчего рекомендуется использовать для доступа на сайты Госуслуг, ФНС, Торговые площадки, ЕГАИС и тогда увидите российский рынок востребованности программистов. А по объему осваиваемых средств российский рынок конечно больше. Только это освоение средств не доходит до программистов.
MacIn
Конечно, но объем «местной» индустрии другой, прямого сравнения не получится.
kommari
И какой к этому формальный повод, если услуги идут через фирму, а не черным налом?
saipr
Про объем я уже написал.
saboteur_kiev
Это зп в outsource и фриланс секторе.