Machine Learning: Как да анализираме данни от анкетно проучване?

Анкетното проучване е често използван метод при пазарните изследвания, чрез който се събират данни от определена група хора (респонденти) с цел да се разбере тяхното мнение по конкретна тема. След това тези данни могат да се изследват с помощта на разнообразни средства за анализ и може да се прилагат върху тях различни методи за машинно обучение (например групиране на респондентите по определени признаци, предвиждане на тяхното поведение и т.н.). Това позволява да добием представа за общите тенденции в данните, връзки между отделните променливи, прилики и различия по отношение на отделните характеристики и др.

В тази статия ще ви покажа чрез практически пример как можете да анализирате данни от анкетно проучване и да групирате респондентите по определени характеристики. Ще използваме езика за програмиране Python и някои негови популярни библиотеки за анализ на данни и машинно обучение.

С какви данни ще работим?

Извадката съдържа данни от анкетно проучване за нагласите на служители в ИТ индустрията по въпроси за психичното здраве. Имаме 1433 респонденти и 63 въпроса в анкетата.

Въпросите са свързани с:

  • Социално-демографски характеристики на респондентите
  • Длъжност и големина на фирмата, в която работят
  • Отношението на работодателите към психичното здраве
  • Бъдещи нагласи на респондентите относно психичното здраве

Повече информация за проучването можете да намерите тук.

Изследване на данните

Ще се запознаем по-добре с данните с помощта на редица визуализации, изградени с библиотеката Plotly.

Профил на респондента

Визуализациите, които ще видите по-надолу, представят данни за респондентите свързани с тяхната възраст, местожителство, длъжност и психично здраве.

  1. На каква възраст са респондентите?

Следната хистограма представя разпределението на характеристиката възраст (age). Средната възраст на респондентите е 34 години.

  1. Респондентите взели ли са мерки относно психичното си здраве?

От стълбовидната диаграма става ясно, че повече от половината респонденти са се консултирали със специалист – 839 на брой. Останалите не са предприели мерки.

  1. Какъв е полът на респондентите?

Има най-много респонденти от мъжки пол 1061, което е нормално за ИТ индустрията. От женски пол са 342 на брой, а хора, които се определят като различен от мъжки или женски пол са само 30 на брой.

  1. В кои държави са респондентите?

На картата можем да видим колко на брой респонденти има в отделните държави, като цветовете отразяват броя. По-голямата част от респондентите са в САЩ (59.33%) и Великобритания (12.77%).

  1. Какъв е броят на респондентите според размера, типа на фирмата и това дали са взели мерки за психичното си здраве?

От следната групирана стълбовидна диаграма става ясно, че най-голям брой респонденти са в ИТ фирми, които имат 26-100 на брой служители. Единственият случай, в който има повече респонденти от фирми, различни от ИТ, е за тези, които не са предприели мерки за психичното си здраве и фирмата им е с повече от 1000 служители.

  1. Какви длъжности заемат респондентите?

На визуализацията са представени 10-те длъжности, на които са назначени най-голям брой от респондентите. На първо място са back-end разработчици – 263 на брой, а на 10-то са дизайнери – 28 на брой.

Тази точкова диаграма показва процента респонденти, назначени на различни длъжности според това дали са предприели мерки за психичното си здраве. Единствено за позиция тийм лидер по-голям процент от респондентите не са се консултирали със специалист – 51.47%. За останалите позиции по-голям процент от респондентите са взели мерки.

  1. Колко от респондентите са предприели мерки и отишли на консултация след като им е била поставена диагноза от специалист?

Тази визуализация представя какъв процент от респондентите са предприели мерки и отишли на консултация след поставена диагноза от специалист. В 94.41% от случаите, изпитващите психични проблеми са взели мерки. 22.73% от тези, които нямат такива заболявания, въпреки това са решили да отидат на консултация. В 77.27% от случаите, респонденти, които са здрави, не са отишли на консултация, а тези, които имат проблеми, в 5.59% от случаите не са взели мерки.

Разлики между настоящ и минали работодатели

Следващите визуализации представят отношението на настоящия и миналите работодатели
към психичното здраве. Ще добием представа до каква степен приемат на сериозно
подобни проблеми, дали предлагат ресурси за запознаване с такива теми и дали
запазват анонимността на свои служители, които имат психични проблеми.


Настоящият и миналите работодатели на по-голямата част от респондентите не са предоставяли ресурси за запознаване с психични проблеми. 24.42% от респондентите са отговорили, че настоящият им работодател приема психичните проблеми също толкова сериозно колкото физическите, а 44.10% от тях са отговорили, че не е било така при миналите им работодатели. Голям процент от респондентите не знаят дали анонимността им се защитава при наличие на психични проблеми при минали и настоящи работодатели.

Следващите 2 визуализации представят до каква степен респондентите са склонни да споделят на колеги и преки ръководители за психичното си здраве. Първата се отнася за настоящия им работодател, а втората за миналите.


Голям процент от респондентите са по-склонни да споделят на ръководителите си при наличие на психичен проблем отколкото на колеги в екипа. Това се е наблюдава повече при минали работодатели отколкото при настоящия.

Със следващата визуализация ще видим случаите, в които дискутирането на психични проблеми е довело до негативни последици за респондентите при минали и настоящи работодатели.

При настоящия работодател в много редки случаи след дискусия с колеги или ръководители, се е стигнало до негативни последици. 48.22% от респондентите са споделили с пряк ръководител и е имало положителен резултат. Същото може да се каже и за миналите работодатели. В повечето случаи е нямало негативни последици.

Бъдещи нагласи

Част от въпросите в анкетата са свързани с това дали респондентите биха споделили в интервю за проблемите, с които се борят, и дали смятат, че притежаването на такива би навредило на тяхната кариера в бъдеще.

Първо ще видим нагласата на респондентите относно това дали се чувстват по-комфортно да споделят на потенциален работодател за свой физически или ментален проблем.

По-голямата част от респондентите са отговорили, че не биха дискутирали психични проблеми с потенциален работодател. По-склонни са да споделят за физически проблем. Има и такива, които не са сигурни, но отново се чувстват по-комфортно да споделят за физически проблем отколкото психичен.

Следващата визуализация представя до каква степен респондентите мислят, че притежаването на психични проблеми би навредило на кариерата им в бъдеще.

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

Групиране на респондентите по сходни характеристики

Разпределяне на респондентите в определени групи ни дава друг поглед върху данните и позволява по-задълбочено да ги анализираме.

Ще използваме методите за машинно обучение Principal Component Analysis (PCA) и K-means клъстеризация, които се отнасят към задачите без контролна извадка, за да открием групи от респонденти въз основа на определени критерии за подобие.

Прилагане на PCA

С PCA можем да намалим броя характеристики в извадката, запазвайки голяма част от дисперсията в данните.

# Стандартизиране на данните чрез StandartScaler()
X = np.array(df_numeric)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Създаване на обект и използване на PCA
pca = PCA()
pca.fit(X_scaled)

PCA изисква входните данни да са числови стойности, които е необходимо също така да бъдат и мащабирани, за да не се получат подвеждащи резултати.

Следната стълбовидна диаграма представя новосъздадените променливи (компоненти). Те са 49, колкото е броят променливи в извадката и са комбинация от първоначалните характеристики. Връзката (мултиколинеарността) между компонентите е минимална и по-голямата част от дисперсията е в първите няколко.

Следващата визуализация е линейна диаграма, която представя общата дисперсия при конкретен брой компоненти.

Нека изберем броя на компонентите, така че да съдържат 85% от дисперсията. В този случай той ще бъде 29.

След като сме определили колко компонента ще използваме, можем да преминем към прилагане на метода върху мащабираните данни.

# Задаване на брой компоненти
pca.n_components = 29

# Използване на PCA за редуциране на дименсии
X_reduced = pca.transform(X_scaled)
df_X_reduced = pd.DataFrame(X_reduced, index=df.index)

5 случайно избрани реда от данните след PCA изглеждат по следния начин:

012345678910111213141516171819202122232425262728
696-3.020880.66525-0.6359074.244390.1929790.886942-1.24587-1.76764-1.081540.9707460.411829-0.6193390.1473931.6365-0.4521140.8267940.432884-0.799267-1.139881.78259-0.0251821-0.2489550.958770.150769-1.01854-0.4474440.405814-0.3519750.364127
471-2.454120.1027232.79864-0.6568842.338410.573274-2.142861.04499-0.616161-0.5322250.875877-0.5174640.5477970.1651670.337162-0.523091-0.402383-0.561683-0.8413650.803967-0.2641221.572330.436379-1.019780.47535-0.1974730.742108-0.223675-0.392804
914-1.3388-0.860249-2.752750.7466811.188330.225183-0.52729-0.6206180.155795-0.06730151.031050.3170930.3987621.91868-0.2451130.605752-0.426019-0.818156-0.0250206-0.07391310.2800420.212777-0.885925-0.691041-0.7378961.07779-0.32887-0.5838250.692823
817-2.01344-2.268981.33983-0.949053-0.7544741.836381.92311-2.3917-0.653669-0.871317-0.44348-0.623953-0.2594671.027361.586451.031990.8975591.540770.357973-0.73939-1.215490.2577130.3748840.0486526-0.1803240.453169-0.876290.0442040.280999
535-1.60534-2.594930.819649-0.907739-0.305614-1.15739-3.47492-0.566866-0.6975230.0323760.289265-0.1899412.09965-0.883293-0.8055370.9872220.967741-0.946665-1.829871.047140.40774-1.08073-0.2165560.308355-0.0477905-0.431504-1.028021.90052-0.627082

Клъстеризация с K-means

K-means клъстеризацията изчислява разстоянията между всеки обект до центъра на клъстера и организира данните по такъв начин, че да е голямо сходството между обектите вътре в клъстера и малко сходство между тези от съседни клъстери.

Алгоритъмът изисква предварително да зададем брой клъстери. За тази цел ще създадем линейна диаграма, която показва изменението на отдалечеността на точките вътре в клъстерите (inertia) в зависимост от броя клъстери.

Оптималният брой клъстери според визуализацията е 3, защото след това наклонът на кривата става по-плавен и при по-големите бройки клъстери разликата в стойностите за отдалечеността на точките вътре в клъстерите е по-малка.

# Прилагане на KMeans()
kmeans = KMeans(n_clusters=3, random_state=3442)
kmeans.fit(X_reduced)
kmeans_pred = kmeans.predict(X_reduced)

След прилагане на KMeans(), всеки от респондентите в извадката е разпределен в един от 3 клъстера в зависимост от неговите характеристики.

Резултати

Резултатите от клъстеризацията ще представим с помощта на 2 визуализации. Първата ще включва множество диаграми на разсейването, показващи връзката между отделните компоненти, като създадените клъстери са обозначени с различни цветове.

Survey Data Analysis – Scatter Matrix PCA

На визуализацията можем да видим, че първите 2 компонента представят най-ясно разпределението на данните.

Тази графика ни позволява по-отблизо да видим разпределението на респондентите в отделните клъстери. Размера на точките зависи от това на колко години е респондентът.

Клъстерите са следните:

  • Клъстер 0 (Син клъстер) съдържа 530 на брой респонденти. Предимно работещи в малки фирми. Хората в този клъстер нямат психични проблеми. За тях би било лесно да вземат отпуск по такива причини и се чувстват достатъчно комфортно да говорят на такива теми с колеги и преки ръководители.
  • Клъстер 1 (Розов клъстер) съдържа 529 на брой респонденти, предимно работещи в малки фирми. Хората в този клъстер са изпитвали психични проблеми и са отишли на консултация при специалист, за тях е лесно да вземат отпуск по такива причини и се чувстват достатъчно комфортно, за да споделят за проблемите си с колеги и преки ръководители.
  • Клъстер 2 (Жълт клъстер) съдържа 374 на брой респонденти, предимно работещи в големи фирми. Тук не е от значение дали имат психични проблеми, но във фирмите им е трудно да вземат отпуск по такива причини, ако се наложи. Срещали са негативни последици от разговори на такива теми и не се чувстват комфортно да споделят с колеги и преки ръководители за проблемите си.

Като извод можем да кажем, че групирането се е получило добре. Разбира се не всички респонденти, отговарят изцяло на съответните критерии за клъстерите, но те може да са попаднали в тях заради стойностите на някои от другите променливи. Резултатите от клъстеризацията могат да бъдат подобрени като се правят множество експерименти с различни стойности на параметрите на KMeans().

Кода на визуализациите, подготовката на данните за анализ и още допълнителни неща можете да намерите в цялостния пример.

Искате да научите повече за машинното обучение?

Включете се в курса по машинно обучение и анализ на данни с Python.

Научете повече

Автор: Десислава Христова