WedX - журнал о программировании и компьютерных науках

Классификация RandomForest - ближайшая точка для изменения класса

В настоящее время я работаю над набором данных Kaggle, касающимся аналитики человеческих ресурсов.

Я очистил набор данных, протестировал некоторые модели. Лучшим из них является RandomForestClassifier, который с хорошей точностью (около 99%) предсказывает, покинул ли сотрудник компанию или нет.

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

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

Я прикрепил ниже фрагмент кода, если вы хотите попробовать:

dataset = pd.read_csv("HR.csv")

# Cleanup/Preparation datas
convert_dict = {"high" : 3, "medium": 2, "low": 1}
dataset = dataset.replace({"salary": convert_dict})

dataset = pd.get_dummies(dataset)

X = dataset.drop("left", axis=1)
y = dataset["left"]
scaler = MinMaxScaler()
X = scaler.fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# training best model (I pass the benchmark part)
model = RandomForestClassifier(bootstrap=False, n_estimators=50)
model.fit(X_train, y_train)
acc = model.score(X_test, y_test)
print(acc)

# Eval
eval_dataset = dataset[dataset["left"] == 0]
X = eval_dataset.drop("left", axis=1)
y = eval_dataset["left"]
X = scaler.transform(X)
y_pred = model.predict_proba(X) # => This is wrong

Спасибо за поддержку,


Ответы:


1

Вы говорите, что ваша модель точна на ~ 99%, но это тестируется? Если так здорово! Теперь представьте, что у вас есть новые данные, которые содержат все ваши поля данных, вы сможете использовать метод predict_proba для каждого наблюдения, чтобы предсказать, ушли они или нет. В этом смысле вы можете использовать это как простой прокси для ухода, так как это лучшее, что у вас есть прямо сейчас.

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

19.10.2017
  • Спасибо за ответ ! Да, точность составляет 98,8 % для тестового образца и чуть выше 99 % для перекрестной проверки. Я попытаюсь извлечь некоторые записи, в которых сотрудник все еще находится в компании, просто чтобы получить свежие данные и попробовать функцию predict_proba. Дело в том, что я не могу найти самый важный во всей компании как есть (потому что мне все еще нужен сотрудник для его обучения). 19.10.2017
  • Я извлек 50 элементов, обучил модель без них и оценил вероятность этих элементов. Вывод выглядит более явно более логичным (от 50% - 50% до 68% - 32%). Сейчас я сосредоточусь на этом решении, спасибо за решение! 19.10.2017

  • 2

    В вашем вопросе есть несколько вопросов...

    Я использовал метод predict_proba для модели поезда, но это дает мне вероятность того, что сотрудник ушел или нет. Это не вероятность того, что работник уйдет.

    Это неправильно на многих уровнях:

    • философски, поскольку сотрудник уже либо уволился, либо нет, здесь нет никакой фактической вероятности, и поэтому соответствующий столбец данных left на самом деле двоичный (0/1), а не в диапазоне [0,1]

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

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

    Непонятно, что ваш код делает после #Eval, почему вы, кажется, ведете записи только с left==0 или что именно представляет собой best_1 (возможно, ваша «лучшая» модель?). Но применение predict_proba к вашему тестовому набору X_test действительно даст вам вероятностное предположение модели относительно увольнения этих (невидимых во время обучения) сотрудников.

    19.10.2017
  • Ой, у меня не получилось скопировать/вставить. best_1 — моя лучшая модель, основанная на GridSearch (здесь не представлена). На сеансе eval я оставил оставшихся сотрудников только для того, чтобы попытаться оценить возможность их ухода. Я предполагаю, что есть шаблон, и я не знаю, насколько я близок к переходу от класса 0 к 1. Что касается дисбаланса, я точно не знаю, потому что осталось около 25% набора данных. 19.10.2017
  • @Николас М. Я не уверен, что следую за тобой. Ваш набор данных действительно несбалансирован. И если вы нашли ответ хотя бы частично полезным, приветствуются голоса (ответы требуют драгоценного времени...) 19.10.2017
  • Хорошо, я не знаю, откуда мы можем сказать, что набор данных несбалансирован. Это 40% против 60%, 25% против 75%, 10% против 90% (в настоящее время это моя проблема) или 99% против 1%. Конечно, ваш ответ полезен, и спасибо за него (и я также видел, что вы отредактировали мой пост, так что спасибо и за него!) 19.10.2017
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]