Як слід підходити до цієї проблеми бінарного передбачення?


9

У мене є набір даних із наступним форматом.

Прогнози раку немає раку

Рак бінарного результату / рак немає. Кожен лікар у наборі даних бачив кожного пацієнта і давав незалежне рішення щодо того, хворий на рак чи ні. Потім лікарі дають рівень впевненості з 5, що їх діагноз правильний, а рівень довіри відображається в дужках.

Я спробував різні способи отримати хороші прогнози з цього набору даних.

Мені непогано працює лише серед лікарів, ігноруючи їх рівень довіри. У таблиці вище, яка мала б поставити правильні діагнози для пацієнта 1 та пацієнта 2, хоча було б неправильно сказано, що у пацієнта 3 є рак, оскільки більшістю 2-1 лікарі вважають, що у пацієнта 3 є рак.

Я також спробував метод, в якому ми випадково відбираємо вибірки двох лікарів, і якщо вони не погоджуються один з одним, то вирішальний голос іде до того, хто лікар буде впевненішим. Цей метод економічний тим, що нам не потрібно консультуватися з великою кількістю лікарів, але він також значно збільшує рівень помилок.

Я спробував пов'язаний метод, в якому ми випадково вибираємо двох лікарів, і якщо вони не згодні один з одним, ми випадковим чином вибираємо ще двох. Якщо один діагноз попереду, принаймні, двома «голосами», то ми вирішуємо справи на користь цього діагнозу. Якщо ні, ми продовжуємо брати вибірку більше лікарів. Цей метод досить економічний і не робить занадто багато помилок.

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

У мене є різні набори даних, що відповідають цьому загальному опису, тому розміри вибірки змінюються, і не всі набори даних стосуються лікарів / пацієнтів. Однак у цьому конкретному наборі даних є 40 лікарів, які бачили 108 пацієнтів.

EDIT: Ось посилання на деякі підрахунки, які є результатом мого читання відповіді @ jeremy-miles.

  1. Невзважені результати - у першій колонці. Насправді в цьому наборі даних максимальне значення довіри становило 4, а не 5, як я помилково сказав раніше. Таким чином, після наближення @ jeremy-miles найвищий невагомий бал, який може отримати будь-який пацієнт, буде 7. Це означає, що буквально кожен лікар стверджував, що у цього пацієнта рак 4 довіри. Найнижчий невагомий бал, який може отримати будь-який пацієнт, - це 0, а це означає, що кожен лікар стверджував, що рівень впевненості становить 4, що у цього пацієнта не було раку.

  2. Зважування Альфа Кронбаха. У SPSS я виявив, що загальна Альфа Кронбаха склала 0,9807. Я спробував переконатися, що це значення було правильним, обчисливши Альфу Кронбаха більш ручним способом. Я створив коваріаційну матрицю з усіх 40 лікарів, яку я тут вставлю . Тоді виходячи з мого розуміння альфа-формули Кронбаха де - кількість елементів (тут лікарі - це "предмети") я обчислив шляхом підсумовування всіх діагональних елементів у матриці коваріації, а шляхом підсумовування всіх елементів у коваріаційна матриця. Потім я отримавα=КК-1(1-σхi2σТ2)Кσхi2σТ2α=4040-1(1-8.7915200,7112)=0,9807 Потім я підрахував 40 різних результатів Alpha, які коли кожного лікаря віддалили від набір даних. Я зважив будь-якого лікаря, який негативно вплинув на Альфу Кронбаха в нуль. Я придумав ваги для інших лікарів, пропорційні їх позитивному внеску в Альфу Кронбаха.

  3. Зважування за загальними співвідношеннями предметів. Я обчислюю всі співвідношення загальних предметів, а потім зважую кожного лікаря пропорційно величині їх співвідношення.

  4. Зважування коефіцієнтів регресії.

Я все ще не впевнений у тому, як сказати, який метод працює «краще», ніж інший. Раніше я обчислював такі речі, як оцінка рівня майстерності Періса, що підходить для випадків, коли є бінарне передбачення та бінарний результат. Однак зараз у мене прогнози коливаються від 0 до 7 замість 0 до 1. Чи слід перетворювати всі зважені бали> 3,50 до 1, а всі зважені бали <3,50 до 0?


Чи можемо ми сказати, що No Cancer (3)це Cancer (2)? Це трохи спростить вашу проблему.
Уейн

1
Re: у вашій структурі даних майже завжди краще мати різні змінні (чи є у пацієнта рак; наскільки впевнена оцінка) у різних стовпцях. Поєднання їх як з "без раку (3)" суттєво обмежує ваші можливості.
rolando2

@Wayne Дані варіюються від прогнозування раку з максимальною впевненістю Cancer (4)до прогнозу відсутності раку з максимальною впевненістю No Cancer (4). Ми не можемо сказати, що це No Cancer (3)і Cancer (2)те саме, але можна сказати, що континуум є, і середні моменти в цьому континуумі є Cancer (1)і є No Cancer (1).
user1205901

@ rolando2 Дякую за пораду. Я змінив речі у власному файлі даних, щоб тепер вони були відокремлені.
user1205901

1
Зауважте, що ваш поріг є налаштованим параметром , тому відповідне обмеження залежатиме від вашого критерію оцінки. Оскільки я був не знайомий з вашою метрикою, я задирав її, і насправді перший хіт може бути актуальним для вас: Примітка про максимальний бал майстерності Періса (2007) .
GeoMatt22

Відповіді:


7

По-перше, я побачив би, чи лікарі згодні між собою. Ви не можете проаналізувати 50 лікарів окремо, тому що вам подобається модель - один лікар буде виглядати чудово, випадково.

Ви можете спробувати поєднати впевненість та діагноз у 10-бальній шкалі. Якщо лікарі кажуть, що у пацієнта немає раку, і вони дуже впевнені, це 0. Якщо доктор каже, що у них рак, і вони дуже впевнені, це 9. Якщо доктор каже, що у них немає, і не впевнені, це 5 і т.д.

Коли ви намагаєтесь передбачити, ви робите якийсь регресійний аналіз, але, думаючи про причинний порядок цих змінних, це навпаки. Чи є у пацієнта рак, є причиною діагнозу, результат - діагноз.

Ваші ряди повинні бути пацієнтами, а ваші стовпці - лікарями. Тепер у вас ситуація, яка є звичайною в психометрії (саме тому я додав тег).

Потім подивіться на зв’язки між балами. Кожен пацієнт має середній бал і бал від кожного лікаря. Чи співвідносить середній бал позитивний показник кожного лікаря? Якщо ні, то цей лікар, напевно, не заслуговує на довіру (це називається співвіднесенням предмета). Іноді ви вилучаєте одного лікаря із загального балу (або середнього балу) і бачите, чи співвідноситься цей лікар із середнім показником всіх інших лікарів - це виправлене повне співвідношення предмета.

Можна обчислити альфу Кронбаха (що є формою внутрішньокласової кореляції) та альфа без кожного лікаря. Альфа завжди повинна підніматися, коли ви додаєте лікаря, тому, якщо вона підвищується, коли ви видаляєте лікаря, рейтинг цього лікаря є підозрюваним (це часто не говорить вам про щось, що відрізняється від виправленої сумарної кореляції пункту).

Якщо ви використовуєте R, подібні речі доступні в пакеті психіки, використовуючи функцію альфа. Якщо ви використовуєте Stata, команда - альфа, в SAS - це proc corr, а в SPSS - це масштаб, надійність.

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

Або ви можете пропустити цю стадію і регресувати оцінку кожного лікаря за діагнозом окремо, і трактувати параметри регресії як вагу.

Не соромтеся попросити роз'яснення, і якщо ви хочете книгу, мені подобаються «Шкала вимірювання здоров'я» Стрейнера та Нормана.

-Редагуйте: на основі додаткової інформації про ОП.

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

Я б зараз робив логістичну регресію і дивився на криві ROC.

Різниця між вагою за регресією та кореляцією залежить від того, як ви вважаєте, лікарі реагують. Деякі документи можуть бути, як правило, більш впевненими (без того, щоб бути більш вмілими), а значить, вони можуть більше використовувати крайні діапазони. Якщо ви хочете виправити це, це використовує кореляція, а не регресія. Я, мабуть, зважуюсь на регресію, оскільки це зберігає вихідні дані (і не відкидає жодної інформації).

Правка (2): Я запустив логістичні регресійні моделі в R, щоб побачити, наскільки кожна з них прогнозувала вихід. tl / dr: між ними нічого немає.

Ось мій код:

d <- read.csv("Copy of Cancer data - Weightings.csv")

mrc <- glm(cancer ~ weightrc, data = d, family = "binomial")
mun <- glm(cancer ~ unweight, data = d, family = "binomial")
mca <- glm(cancer ~ weightca, data = d, family = "binomial")
mic <- glm(cancer ~ weightic, data = d, family = "binomial")

d$prc <- predict(mrc, type = "response")
d$pun <- predict(mun, type = "response")
d$pca <- predict(mca, type = "response")
d$pic <- predict(mic, type = "response")

par(mfrow = c(2, 2))
roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

4 криві ROC

І вихід:

> par(mfrow = c(2, 2))
> roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$prc, ci = TRUE,     plot = TRUE)

Data: d$prc in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9831
95% CI: 0.9637-1 (DeLong)
> roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pun, ci = TRUE,     plot = TRUE)

Data: d$pun in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9808
95% CI: 0.9602-1 (DeLong)
> roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pca, ci = TRUE,     plot = TRUE)

Data: d$pca in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9854
95% CI: 0.9688-1 (DeLong)
> roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pic, ci = TRUE,     plot = TRUE)

Data: d$pic in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9822
95% CI: 0.9623-1 (DeLong)

1
Дуже добре. І, як дозволяють ваші міркування, можливо, якийсь лікар погіршить альфа, надаючи унікальне розуміння, знижуючи тенденцію.
rolando2

@ jeremy-miles Дякуємо за цю відповідь та люб’язну пропозицію поставити питання на тему. Я спробував реалізувати те, що ви запропонували, і відредагував ОП, щоб опублікувати деякі результати. Головне, що мені цікаво, - чи правильно я трактував ваш пост, а також, що потрібно, щоб показати, що певні методи агрегації працюють краще, ніж інші методи прогнозування результату.
user1205901

Дякуємо за публікацію даних. Я перегляну це пізніше. (Яке програмне забезпечення ви використовуєте?)
Jeremy Miles

@JeremyMiles Дякуємо за публікацію цієї редакції! Я використовую MATLAB, але я знаю досить про R, щоб зрушити вгору та використовувати це замість цього, оскільки ви вже розмістили код R. Я підрахував, що Альфа Кронбаха в SPSS - чи отримуєте ви значення, відмінне від R?
user1205901

1
Так, це я думав. Тож кожен лікар набирає різну вагу.
Джеремі Майлз

2

Дві нестандартні пропозиції:

  1. Ви можете використовувати ваги для функції втрат вашої логістичної регресії, так що лікар, який дуже впевнений, що пацієнт має рак з P = 1, отримує подвійний вплив, має інший, який каже, що у нього рак з P = 0,75. Не забувайте правильно перетворювати свої ймовірності на ваги.
  2. Сімейство моделей, які часто нехтують, - це моделі ранжирування. У ранжирах є три великі групи: впорядкованому, точковому та парному ранжируванні, залежно від того, який ваш внесок Це здається, що ви можете використовувати точкове ранжування у вашому випадку.

Чи можете ви запропонувати спосіб правильно перетворити ймовірності на ваги? Я спробував гуглювати цю концепцію, але не зміг знайти чітких порад, як це зробити.
user1205901

@ user1205901, я мав на увазі щось дуже просте, як-от: хай P= ймовірність захворіти на рак лікарем, тоді (у записі python): y=[1 if p >= 0.5 else 0 for p in P]і w=[abs(p-0.5)*2 for p in P]. Потім тренуйте модель:LogisticRegression().fit(X,y,w)
Рікардо Крус

У функції втрати це призведе, наприклад, до подвоєння ваги до 0,1, ніж до 0,2, якщо не бути раком (0,1 -> 0,8 і 0,2 -> 0,6). Якщо лікар не впевнений (P ~ 0,5), то спостереження майже нічого не сприяє втраті. Яку б модель він не використовував, він повинен підтримувати додавання вектора витрат до функції втрат, яку підтримує більшість моделей. Я не знаю, чи це добре, але спробувати банально. Йому потрібно спочатку вказати показник. Функція втрат може бути додатково пристосована до того, який показник він хоче максимально використовувати.
Рікардо Крус

2

(Це не в моїй області знань, тому відповідь Джеремі Майлза може бути більш достовірною.)

Ось одна ідея.

По-перше, уявіть, що немає рівня довіри. Потім для кожного пацієнтаi=1N, вони або мають рак, або ні ci{0,1}, і кожен лікар j=1м або діагностували у них рак, або ні, гij{0,1}.

Простий підхід полягає в тому, щоб припустити, що, хоча ми знаємо справжній статус пацієнта, лікарі можуть погодитись або не погодитися, але діагноз кожного лікаря може розглядатися як незалежний. Тобтогijє умовно незалежною даноїci. Це призводить до чітко визначеного класифікатора, відомого як Naive Bayes , з параметрами, які легко оцінити.

Зокрема, основними параметрами є базовий показник, p[c]1Niciта ймовірність умовного діагнозу

p[гj|c]iгijciici
Зазначимо, що цей останній параметр є середньозваженим діагнозом для лікаря j, де ваги є справжніми умовами пацієнта ci.

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

p[гj|c,шj]iгijшijciiшijci
Ось шij0 - це вага, що відповідає рівню довіри гij.

Зверніть увагу, що якщо ваги будуть подані як ймовірності ш[0,1], тоді ви можете використовувати формулу "ярлик Бернуллі "

p[гш]=гш(1-г)1-ш
для обліку г=0 справа належним чином.

Примітка. Це вимагає, щоб ваше програмне забезпечення дало, 0^0=1а не 0^0=NaN, що є загальним, але варто перевірити! Можна також забезпечитиш(0,1), наприклад, якщо впевненість є к{1К} тоді ш=к/(К+1) працювали б.


У контексті коментаря @Wayne: Якщо ви говорите No Cancer (3) = Cancer (2), це відповідає моїй моделі зважування, яка використовуєтьсяш[к]=кК, оскільки 25=1-35. Якщо ви скажете No Cancer (3) = Cancer (3), це відповідаєш[к]=кК+1, оскільки 36=1-36.
GeoMatt22

Чи можу я перевірити, що я розумію
p[гj|c,шj]iгijшijciiшijci
правильно? Якщо результати [1,0,1] і прогноз лікаря [0,1,1], а вага лікаря - [0,2,0,4,0,8], чи виявляється вірогідна умовна діагностика 0,5?
user1205901

Вибачте, я зрозумів, що мав намір саме це г's зважити, тобто δ[0,1], а не показники г{0,1}. Тож для вашого випадкуδi=шi(гi=1)+(1-шi)(гi=0)δ=[0,8,0,4,0,8]. Тодіp[c,δ]=cδ¯=0,8+0+0,83=230,8, поки p[2]=c¯=23 і p[δ]=δ¯=560,8. Томуp[c|δ]=p[c,δ]/p[δ]=0,8 і p[δ|c]=p[c,δ]/p[c]=0,8.
GeoMatt22

0

З вашого запитання виходить, що те, що ви хочете перевірити, - це ваша система вимірювання. У царині технологічних процесів це буде аналіз системи вимірювання атрибутів або MSA.

Це посилання надає корисну інформацію про необхідний розмір вибірки та обчислення, які проводяться для проведення дослідження цього типу. https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-calculations/

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

Провести це дослідження можна одним із двох способів. Ви можете використовувати просту оцінку раку / без раку для визначення згоди між лікарями та кожним лікарем. В ідеалі вони також повинні мати можливість діагностувати з однаковим рівнем впевненості. Потім ви можете використовувати повну 10-бальну шкалу для перевірки згоди між лікарем та кожним лікарем. (Усі повинні погодитися, що рак (5) - це той самий рейтинг, що жоден рак (1) не є тим же рейтингом, і c.)

Розрахунки на пов'язаному веб-сайті прості для проведення на будь-якій платформі, яку ви можете використовувати для своїх тестів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.