Содержание
Как исправить отчёт СЗВ‑стаж
⚡ Все статьи
/
⚡ Сотрудники
Даша Черепанова
Ошибки в СЗВ-СТАЖ можно исправить обычной корректировкой или отдельным видом отчёта, который называется СЗВ-КОРР. Какой именно нужен вам — зависит от ошибки в первичном отчёте. Часто сам ПФР говорит о том, что и каким способом нужно исправить.
Содержание
Если хотите добавить в отчёт сотрудника
Если хотите исправить период стажа или его особенности
Если ошибочно добавили сотрудника в отчёт
Если ошиблись в ФИО или СНИЛС сотрудника
Если хотите добавить в отчёт сотрудника
Вы сдали СЗВ-СТАЖ, а потом поняли, что забыли включить в него одного из сотрудников. Чтобы ПФР узнал о его стаже, сдайте дополняющий отчёт СЗВ-СТАЖ. В нём нужно указать только того сотрудника, о котором вы забыли в первичном отчёте.
Как это сделать в Эльбе
- Нажмите ссылку «Подготовить корректирующий отчёт» на последнем шаге задачи «Сдать отчёт СЗВ-СТАЖ».
- Выберите тип отчёта «Дополняющий». Отметьте галочкой того сотрудника, которого хотите добавить в отчёт.
- Нажмите на сотрудника и укажите его периоды стажа.
Если хотите исправить период стажа или его особенности
Вы забыли отразить в отчёте отпуск сотрудника или указать данные о районном коэффициенте. Чтобы это поправить, сдайте отчёт СЗВ-КОРР с типом «корректирующий». В нём нужно отразить правильный стаж сотрудника. Используется, чтобы указать забытые больничные, отпуска, районные коэффициенты или исправить ошибки в дата приёма и увольнения сотрудника.
Как это сделать в Эльбе
- Нажмите ссылку «Подготовить корректирующий отчёт» на последнем шаге задачи «Сдать отчёт СЗВ-СТАЖ».
- Выберите тип отчёта «Корректирующий».
- Отметьте галочкой того сотрудника, данные по которому нужно исправить, нажмите на него и укажите правильный период стажа.
Если ошибочно добавили сотрудника в отчёт
В отчёт случайно попал сотрудник, которого там быть не должно, например, потому что он уже уволен. Чтобы удалить его из отчёта, вам нужно сдать СЗВ-КОРР с типом «Отменяющий».
Как это сделать в Эльбе
- Нажмите ссылку «Подготовить корректирующий отчёт» на последнем шаге задачи «Сдать отчёт СЗВ-СТАЖ».
- Выберите тип отчёта «Отменяющий».
- Отметьте галочкой того сотрудника, которого нужно исключить из отчёта.
Новым ИП — год Эльбы в подарок
Год онлайн-бухгалтерии на тарифе Премиум для ИП младше 3 месяцев
Попробовать бесплатно
Если ошиблись в ФИО или СНИЛС сотрудника
Вам нужно сначала исключить из отчёта сотрудника с ошибкой в ФИО, а потом добавить туда сотрудника с правильными данными.
Для этого:
- Сдайте СЗВ-КОРР с типом «Отменяющий», укажите в нём сотрудника с ошибкой в фамилии — точно так же, как указывали его в СЗВ-СТАЖ.
- Сдайте СЗВ-СТАЖ с типом «Дополняющий». Укажите в нём сотрудника с правильной фамилией.
Точно так же надо делать, если ошиблись в СНИЛС.
Статья актуальна на
Сотрудники
27
Продолжайте читать
Все статьи
Заработная плата: сроки и порядок выплаты в 2022 году
Частичная мобилизация: что нужно знать работодателю
Подотчётные лица: кто такие, оформление и расчёты
Ещё больше полезного
Рассылка для бизнеса
Дайджест о законах, налогах, отчётах два раза в месяц
Соцсети
Новости и видео — простыми словами, с заботой о бизнесе
Зарплата и управление персоналом ред.
3.1?
+7 (495) 784-71-73
Написать нам
Имя*
Фамилия*
Телефон *
E-mail*
Сообщение
Я даю согласие на обработку персональных данных
Ваша заявка принята. Мы решим ваш вопрос в течение 2-х рабочих часов!
Стать клиентом 1С
Имя: *
Фамилия: *
Телефон: *
E-mail*
Сообщение
Я даю согласие на обработку персональных данных
Спасибо! Ваша заявка принята.
Мы свяжемся с вами в ближайшее время!
Заказать обратный звонок 1С
Имя: *
Фамилия: *
Телефон: *
Я даю согласие на обработку персональных данных
Спасибо! Мы свяжемся с вами через несколько минут
29.11.2021
1С:ЗУП 8
|
Pro 1C
Вопрос:
Где посмотреть Остатки отпусков в 1С: Зарплата и управление персоналом ред. 3.1?
Ответ:
Для просмотра остатков отпусков необходимо зайти в раздел Кадры -Кадровые отчеты и выбрать отчет «Остатки отпусков». В открывшейся форме выбрать дату, сотрудника и организацию. (Рис.1)
Либо через карточку сотрудника. Зайти в Кадры-Сотрудники, провалится в нужного сотрудника и открыть вкладку Отсутствия. ( Рис.2)
Свидетельство о регистрации СМИ: Эл № ФС77-67462 от 18 октября 2016 г.
Контакты редакции: +7 (495) 784-73-75, [email protected]
По этой теме
Pro 1C
Как сформировать Универсальный отчет в программе 1С:Комплексная автоматизация, ред.2.5?
Pro 1C
Как начисляется аванс и удерживается НДФЛ с аванса с 01.01.2023 в программе 1С:Бухгалтерия предприятия, ред.3.0?
Pro 1C
В каком отчете посмотреть все используемые графики сотрудников в программе 1С:Зарплата и управление персоналом, ред.3.1?
Подробнее
14.11.2022 — 24.11.2022
Курс повышения квалификации
Практический курс. Бухгалтерская отчетность бюджетных и автономных учреждений.
Порядок составления, правила проверки, устранение рисков допущения ошибок
15. 11.2022 — 16.11.2022
Вебинар
ОНЛАЙН. Новые ФСБУ и их влияние на показатели отчетности — готовимся к формированию
бухгалтерской отчетности за 2022 год
Email:
Поздравляем! Вы успешно подписались на рассылку
Нет
Получите полный доступ к КонсультантПлюс бесплатно!
Попробовать
Да
Вы переходите в систему КонсультантПлюс
Перейти
Машинный классификатор опорных векторов
в Python; Прогнозирование вероятности текучести кадров с помощью Itertools и Gridsearch | Рой Поланитцер.
. Фото: www.integritytrade. tk. а также для классификации категориальной переменной. Классификатор опорных векторов использует линейную функцию значений признаков, чтобы разделить наблюдения на две категории: 1 (да, отток и т. д.) или 0 (нет, остаться и т. д.). Другими словами, модель классификатора машины опорных векторов предсказывает P(Y=1) как функцию X.
- Метод опорных векторов пытается классифицировать наблюдения, определяя путь, разделяющий классы.
- В простейшей ситуации уравнение для каждой стороны пути представляет собой линейную функцию признаков, и все наблюдения классифицируются правильно. Это называется жестким разделением.
- Идеальное разделение обычно невозможно, и существует компромисс между шириной пути и нарушениями.
- Для наблюдения, расположенного не на правильной стороне пути, степень нарушения измеряется кратчайшим расстоянием между наблюдением и местом, где оно было бы правильно классифицировано.
- Работая с функциями значений признаков, а не с самими значениями признаков, путь, разделяющий наблюдения на два класса, можно сделать нелинейным. Можно создавать новые функции, которые являются квадратами, кубами, четвертыми степенями и т. Д. Из значений функций.
Помня об этом выше, давайте посмотрим на наш набор данных.
Набор данных получен от Kaggle и связан с сотрудниками крупной телекоммуникационной компании. Цель классификации состоит в том, чтобы предсказать, покинет ли работник фирму (1) или нет (0) (переменная y). Набор данных можно скачать отсюда.
импортировать pandas как pd
импортировать numpy как np
из sklearn импортировать предварительную обработку
импортировать matplotlib.pyplot как plt
plt.rc («шрифт», размер = 14)
из sklearn.linear_model импортировать LogisticRegression
из sklearn.test_split импорт train_test_selection
импортировать Seaborn как sns
sns.set(style=”white”)
sns.set(style=”whitegrid”, color_codes=True)
Набор данных предоставляет информацию о сотрудниках компании. Он включает 14 999 записей и 10 полей.
data = pd. read_csv('HR_comma_sep.csv')
data = data.dropna()
print(data.shape)
print(list(data.columns))
(14999, 10)
[ ‘satisfaction_level’, ‘last_evaluation’, ‘number_project’, ‘average_montly_hours’, ‘time_spend_company’, ‘Work_accident’, ‘promotion_last_5years’, ‘department’, ‘salary’, ‘y’]
data.head()
Входные переменные
- уровень удовлетворения : уровень удовлетворенности сотрудника (числовой)
- last_evaluation : время с момента последней оценки в годах (числовое)
- number_projects : количество проектов, завершенных во время работы (числовое: 2, 3, 4, 5, 6, 7) )
- time_spend_company : время, проведенное в компании в годах (числовые: 2, 3, 4, 5, 6, 7, 8, 10)
- Work_accident : имел ли сотрудник несчастный случай на рабочем месте (категория: «1» , «0»)
- Promotion_last_5years : был ли сотрудник повышен в должности за последние пять лет (категория: «1», «0»)
- отдел: отдел, в котором работает сотрудник (категория: «продажи», «бухгалтерский учет», «управление персоналом», «технический», «поддержка», «управление»,
«ИТ», «управление продуктами», «маркетинг». “, “RandD“) - заработная плата : относительный уровень заработной платы (категория: «низкая», «средняя», «высокая»)
Прогнозируемая переменная (желаемая цель): Компания? (бинарный: «1» означает «Да», «0» означает «Нет»)
Столбец отдела в наборе данных имеет много категорий, и нам нужно уменьшить количество категорий для лучшего моделирования. Столбец отдела имеет следующие категории:
data['department'].unique()
array([‘sales’, ‘бухгалтерский учет’, ‘hr’, ‘technical’, ‘support’, ‘management’,
‘IT’, ‘product_mng ‘, ‘маркетинг’, ‘RandD’], dtype=object)
Давайте сгруппируем «техническое обслуживание», «поддержка» и «ИТ» вместе и назовем их «техническими».
data['department']=np.where(data['department'] =='support', 'technical', data['department'])
data['department']=np.where(data[ 'отдел'] == 'ИТ', 'технический', данные ['отдел'])
data['department'].unique()
array([‘продажи’, ‘бухгалтерский учет’, ‘HR’, ‘технический’, ‘управление’,
‘product_mng’, ‘маркетинг’, ‘RandD’ ], dtype=object)
data['y']. value_counts()
sns.countplot(x='y', data=data, палитра='hls')
plt.show()
plt .savefig('count_plot')
count_no_churn = len(data[data['y']==0])
count_churn = len(data[data['y']==1])
pct_of_no_churn = count_no_churn/( count_no_churn+count_churn)
print("\033[1m процент оттока не равен", pct_of_no_churn*100)
pct_of_churn = count_churn/(count_no_churn+count_churn)
print("\033[1m процент оттока", pct_of_churn*100)
процент отсутствия оттока составляет 76,19174611640777
процент оттока 23,80825388359224
Наши классы несбалансированы, а отношение отсутствия оттока к оттоку составляет 6:23 экземпляров3. Прежде чем мы приступим к балансировке классов, давайте проведем еще несколько исследований.
data.groupby ('y'). не кинул компанию.
Мы можем рассчитать категориальные средние для других категориальных переменных, таких как отдел и Work_accident, чтобы получить более детальное представление о наших данных.
data.groupby('отдел').mean()
data.groupby('Work_accident').mean()
data.groupby('promotion_last_5years').mean()
%matplotlib встроенный
data.satisfaction_level.hist()
plt.title('Гистограмма уровня удовлетворенности')
plt.xlabel('satisfaction_level')
plt .ylabel('Frequency')
plt.savefig('hist_satisfaction_level')
Большинство сотрудников компании в этом наборе данных имеют statisfaction_level в диапазоне 0,8–1,0.
data.last_evaluation.hist()
plt.title('Гистограмма последней оценки')
plt.xlabel('last_evaluation')
plt.ylabel(‘Frequency’)
plt.savefig(‘hist_last_evaluation’)
Большинство сотрудников компании в этом наборе данных имеют last_evaluation в диапазоне 0,5–0,6.
table=pd.crosstab(data.number_project,data.y)
table.div(table.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)
plt.title('Гистограмма количества проектов по сравнению с оттоком')
plt. xlabel('Количество проектов')
plt.ylabel('Доля сотрудников')
plt.savefig('number_project_vs_churn_stack')
Количество проектов может быть хорошим предиктором переменной результата.
data.average_montly_hours.hist()
plt.title('Гистограмма среднего количества часов за месяц')
plt.xlabel('average_montly_hours')
plt.ylabel('Частота')
plt.savefig('hist_average_montly_hours')
Большинство сотрудников компании в этом наборе данных имеют medium_montly_hours в диапазоне 150–200.
table=pd.crosstab(data.Work_accident,data.y)
table.div(table.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)
plt.title('Гистограмма с накоплением несчастных случаев на работе и оттока')
plt.xlabel('Work_accident')
plt.ylabel('Доля сотрудников')
plt.savefig('Work_accident_vs_churn_stack')Work_accident кажется хороший предиктор переменной результата.
table=pd.crosstab(data.time_spend_company,data. y)
table.div(table.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)
plt.title('Гистограмма с накоплением времени, проведенного в компании, по сравнению с оттоком')
plt.xlabel('Время, проведенное в компании')
plt.ylabel('Доля сотрудников')
plt.savefig('time_spend_company_vs_churn_stack')Time_spend_company кажется надежным предиктором переменной результата.
table=pd.crosstab(data.promotion_last_5years,data.y)
table.div(table.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)
plt.title('Гистограмма повышения по службе за последние 5 лет по сравнению с оттоком')
plt.xlabel('Повышение по службе за последние 5 лет')
plt.ylabel('Доля сотрудников')
plt.savefig('promotion_last_5years_vs_churn_stack')Promotion_last_5years может быть хорошим предиктором результата.
table=pd.crosstab(data.department,data.y)
table.div(table.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)
plt. title('Гистограмма с накоплением отдела по сравнению с оттоком')
plt.xlabel('отдел')
plt.ylabel('Доля сотрудников')
plt.savefig('department_vs_churn_stack')Отдел кажется быть хорошим предиктором переменной результата.
table=pd.crosstab(data.salary,data.y)
table.div(table.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)
plt.title('Гистограмма с накоплением зарплат и оттока')
plt.xlabel('salary')
plt.ylabel('Доля сотрудников')
plt.savefig('salary_vs_churn_stack')Заработная плата, по-видимому, является хорошим предиктором переменной результата.
Это переменные только с двумя значениями, нулем и единицей.
cat_vars=['Work_accident','time_spend_company','promotion_last_5years','department','salary']
для var в cat_vars:
cat_list='var'+'_'+var
cat_list = pd.get_dummies(data[var], prefix=var)
data1=data.join(cat_list)
data=data1cat_vars=[' Work_accident','time_spend_company','promotion_last_5years','department','salary']
data_vars=data. columns.values.tolist()
to_keep=[i for i в data_vars, если я не в cat_vars]Наш финал столбцы данных будут:
data_final=data[to_keep]
data_final.columns.values array(['satisfaction_level', 'last_evaluation', 'number_project',
'mardal_montly_hours', 'y', 'work_accident_0', 'work_accident_1',
'time_spend_company_2', 'time_spend_company_3',
'time_spend_company_4', 'time_spend_company_5',
'spend_company_4 ',' time_spend_company_5 ',
'spend_company_4'. time_spend_company_10',
'promotion_last_5years_0', 'promotion_last_5years_1',
'department_RandD', 'department_accounting', 'department_hr',
'department_management', 'department_marketing',
'department',sale_product_dmng0023 'department_technical', 'salary_high', 'salary_low',
'salary_medium'], dtype=object)Создав обучающие данные, я передискретизирую класс оттока, используя алгоритм SMOTE (Synthetic Minority Oversampling). Техника). На высоком уровне SMOTE:
- Работает путем создания синтетических семплов из младшего класса (т. е. класса churn) вместо создания копий.
- Случайный выбор одного из k ближайших соседей и использование его для создания подобных, но случайно измененных новых наблюдений.
Мы собираемся реализовать SMOTE на Python.
X = data_final.loc[:, data_final.columns != 'y']
y = data_final.loc[:, data_final.columns == 'y'] from imblearn.over_sampling import SMOTEos = SMOTE(random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0,33, random_state=42)
столбца = X_train.columnsos_data_X,os_data_y=os.fit_sample(X_train, y_train)
os_data_X = pd.DataFrame(data=os_data_X ,columns=columns )
os_data_y= pd.DataFrame(data=os_data_y,columns=['y'])# мы можем проверить номера наших данных
print("\033[1m Длина передискретизированных данных ",len(os_data_X))
print("\033[1m Число неизменяемых данных передискретизируемых",len(os_data_y[os_data_y['y']==0 ]))
print("\033[1m Number of churn", len(os_data_y[os_data_y['y']==1]))
print("\033[1m Доля данных без оттока в передискретизированных данных " ,len(os_data_y[os_data_y['y']==0])/len(os_data_X))
print("\033[1m Доля данных об оттоке данных в передискретизированных данных ",len(os_data_y[os_data_y['y'] ==1])/len(os_data_X))Длина данных о перегреве составляет 15318
Количество NO DACURN в данных Oversampled 7659
Номер churn 7659
Proport
Доля данных об оттоке в данных передискретизации составляет 0,5
Теперь у нас есть идеально сбалансированные данные! Вы, возможно, заметили, что я передискретизировал только обучающие данные, потому что при передискретизации только обучающих данных никакая информация в тестовых данных не используется для создания синтетических наблюдений, поэтому никакая информация не будет просачиваться из тестовых данных в обучение модели.
Itertools — это модуль в python, он используется для перебора структур данных, которые можно обойти с помощью цикла for. Такие структуры данных также известны как итерируемые. Этот модуль включает в себя функции, которые эффективно используют вычислительные ресурсы. комбинации() предоставляет нам все возможные кортежи, последовательность или набор чисел или букв, используемых в итераторе, и элементы считаются уникальными на основе их позиций, которые различны для всех элементов.
import itertoolssl = itertools.combinations([1,2,3,4],3)
for i in l:
print(i)(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)os_data_X.columnsIndex(['satisfaction_level', 'last_evaluation', 'number'average_mons_project, '
, 'Work_accident_1',
'time_spend_company_2', 'time_spend_company_3', 'time_spend_company_4',
'time_spend_company_5', 'time_spend_company_6', 'time_spend_company_7',
'time_spend_company_8', 'time_spend_company_10',
'ropotion_last_5years_0', 'rapotion_last_5years_1',
'Department_randd', 'Department_accounting', 'Department_lest', Department ', Department', Department ', Department', Department ', Department', Department ', Department', Department ', Department', Department '. Department_technical ',
' Salary_high ',' Parlary_low ',' зарплата_медия '],
dtype =' Object ')OS_DATA_X.SHAPE(15318, 27)
os_data_y1 = os_data_y.copy()os_data_X1.rename(columns={'satisfaction_level': "A", 'last_evaluation': "B", 'number_project': "C", 'average_montly_hours': "D", 'Work_accident_0' : "E", 'Work_accident_1': "F", 'time_spend_company_2': "G", 'time_spend_company_3': "H", 'time_spend_company_4': "I", 'time_spend_company_5': "J", 'time_spend_company_6': " K", 'time_spend_company_7': "L", 'time_spend_company_8': "M", 'time_spend_company_10': "N", 'promotion_last_5years_0': "O", 'promotion_last_5years_1': "P", 'department_RandD': "Q" , 'department_accounting': "R", 'department_hr': "S", 'department_management': "T", 'department_marketing': "U", 'department_product_mng': "V", 'department_sales': "W", ' Department_technical': "X", 'salary_high': "Y",
'salary_low': "Z", 'salary_medium': "a"}, inplace=True)os_data_X1. columns
Index(['A', 'B', 'C', 'D', 'E ', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a'], dtype='object')
os_data_y1.rename(columns={'y': «Цель»}, inplace=True)
os_data_y1.columns
Index(['Target'], dtype='object')
Я буду использовать itertools.combination
, чтобы найти минимальный набор функций для получения Точности на тестовом наборе > 0,90:
из sklearn.svm import SVC
из sklearn.metrics import precision_score
из sklearn.metrics import f1_scorefor i in range(1,28):
c = itertools.combinations("ABCDEFGHIJKLMNOPQRSTUVWXYZa",i)
для элемента в c:
ls = list(item)
X_train, X_test, y_train, y_test = train_test_split(os_data_X1[ls], os_data_y1['Target'], test_size= 0,33,random_state=42)
модель = SVC()
model.fit(X_train,y_train)
y_pred = model.predict(X_train)
y_pred1 = model. predict(X_test)
точность = показатель точности (y_train, y_pred)
точность1 = показатель точности (y_test, y_pred1)# print(ls,accuarcy)
, если точность1: > 0,90
print(ls," Точность на тренировочном наборе: {:.4%}".format(accuarcy), " Точность на тестовом наборе: {:.4%}".format(accuarcy1))
Мы видим что лучшая комбинация: 'B', 'C', 'G', 'H' , что есть: 'last_evaluation', 'number_project', 'time_spend_company_2', 'time_spend_company_3'
Cols = ['last_evaluation', 'number_project', 'time_spend_company_2', 'time_spend_company_3'] x = os_spend_company_2 ',' time_spend_company_3 '] x = ospend_company_2'.из sklearn.svm импортировать SVC
из sklearn импортировать метрики
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
svc = SVC()
svc.fit(X_train, y_train) y_pred = svc.predict(X_test)
print('Точность машинного классификатора опорных векторов в тестовом наборе: {:. 2f}'.format(svc.score(X_test, y_test)))Точность машинного классификатора опорных векторов на тестовом наборе: 0,92
Gridsearch — это метод настройки, который пытается вычислить оптимальные значения гиперпараметров. Это исчерпывающий поиск, который выполняется по конкретным значениям гиперпараметров модели. Модель также известна как оценочная. Поиск по сетке может сэкономить нам время, усилия и ресурсы. Gridsearch — простейший алгоритм настройки гиперпараметров. По сути, мы делим область гиперпараметров на дискретную сетку. Затем мы пробуем каждую комбинацию значений этой сетки, вычисляя некоторые показатели производительности с помощью перекрестной проверки.
Во-первых, давайте импортируем GridsearchCV из SciKit Learn.
from sklearn.model_selection import GridSearchCVЗатем давайте создадим словарь с именем param_grid и заполним некоторые параметры для C и гаммы.
param_grid = {'C' : [0. 01, 0.1, 1, 10, 100], 'gamma': [0.01, 0.1, 1, 10, 100] }После этого давайте создадим объект GridSearchCV и подгоним это к обучающим данным.
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
grid.fit(X_train, y_train)Теперь давайте выясним, какие гиперпараметры модели являются лучшими модель.
svc = SVC(C=100, gamma=100, вероятность=True)
svc.fit(X_train, y_train)SVC(C=100, gamma=100, вероятность=True)
4
25 Прогнозирование результатов набора тестов и расчет точности
y_pred = svc.predict(X_test)
print('Точность машинного классификатора опорных векторов на тестовом наборе: {:.2f}'.format(svc.score(X_test, y_test)))
Точность машинного классификатора опорных векторов на тестовом наборе: 0,93
из sklearn.metrics импорта путаницы_матрицы
svm_cm = metrics.confusion_matrix(y_pred, y_test, [1,0])
sns. heatmap(svm_cm, annot=True, fmt='.2f',xticklabels = ["Churn", "No-Churn"] , yticklabels = ["Churn", "No-Churn"] )
plt.ylabel('Истинный класс')
plt.xlabel('Прогнозируемый класс')
plt.title('Классификатор опорных векторов')
plt.savefig('Support_Vector_Machine_Classifier')
Результат говорит нам, что у нас есть 2325+2378 правильных прогноза и 4 неверных
60042 1490+22 .
Цитата из Scikit Learn:
Точность — это отношение tp / (tp + fp), где tp — количество истинных срабатываний, а fp — количество ложных срабатываний. Точность — это интуитивно способность классификатора не маркировать образец как положительный, если он отрицательный.
Отзыв — это отношение tp / (tp + fn), где tp — количество истинных положительных результатов, а fn — количество ложноотрицательных результатов. Под отзывом понимается интуитивно способность классификатора находить все положительные образцы.
Показатель F-бета можно интерпретировать как средневзвешенное гармоническое значение точности и отзыва, где показатель F-бета достигает своего наилучшего значения при 1, а наихудший показатель при 0.
Показатель F-бета взвешивает отзыв больше чем точность коэффициентом бета. бета = 1,0 означает, что полнота и точность одинаково важны.
Поддержка — это количество вхождений каждого класса в y_test.
из sklearn.metrics importclassification_report
print(classification_report(y_test, y_pred))
Когда сотрудник увольняется, как часто мой классификатор предсказывает это правильно? Это измерение называется «отзывом». Из всех случаев оборота классификатор машины опорных векторов распознал 2378 случаев оборота (TP-истинно положительный) из 2524 случаев оборота (TP=2378 и FN=146) во всем наборе тестов. Это означает оборот «отзыва» около 94% (2378/2524).
Когда классификатор предсказывает увольнение сотрудника, как часто этот сотрудник фактически увольняется? Это измерение называется «точность». Классификатор машины опорных векторов правильно предсказал 2378 случаев (TP) как случаи оборота из 2584 случаев (TP = 2378 и FP = 206) во всем наборе тестов. Это означает «точность» оборота около 92% (2378/2584).
из sklearn.metrics import roc_auc_score
из sklearn.metrics import roc_curve
svc_roc_auc = roc_auc_score(y_test, svc.predict(X_test))
fpr, tpr, thresholds = roc_curve(y_test, svc.predict_proba(X_test)[:,1])
plt.figure()
plt.plot(fpr, tpr, label='SVC (площадь = %0.2f)' % svc_roc_auc)
plt.plot([0, 1], [0, 1],'r — ')
plt.xlim([0,0, 1,0])
plt.ylim([0,0, 1,05])
plt.ylim([0,0, 1,05]) xlabel('Коэффициент ложных срабатываний')
plt.ylabel('Коэффициент истинных срабатываний')
plt.title('Рабочая характеристика приемника')
plt.legend(loc="нижний правый")
plt.savefig('svc_ROC' )
plt.show()
Кривая рабочих характеристик приемника (ROC) является еще одним распространенным инструментом, используемым с бинарными классификаторами. Пунктирная линия представляет ROC-кривую чисто случайного классификатора; хороший классификатор остается как можно дальше от этой линии (по направлению к верхнему левому углу).
Записная книжка Jupyter, использованная для создания этого поста, доступна здесь. Буду рад получить отзывы или вопросы по любому из вышеперечисленных.
Теперь я собираюсь распечатать список сотрудников, которые, по прогнозам модели, могут быть уволены.
df = X_test.copy()
df['True'] = y_test
df['Predicted'] = y_pred
prob = svc.predict_proba(X_test)[:,1]
df['вероятность'] = prob
df1 = pd.concat([df['Истина'], df['Прогноз'], df['вероятность']], axis=1)
df1.columns = [‘истина’, ‘прогноз’, ‘вероятность’]
df1
Машина опорных векторов — это контролируемый алгоритм машинного обучения, который можно использовать как для задач классификации, так и для регрессии. Тем не менее, он в основном используется в задачах классификации.
В этом алгоритме мы отображаем каждый элемент данных как точку в n-мерном пространстве (где n — количество имеющихся у вас признаков), где значением каждого признака является значение конкретной координаты.
Затем мы выполняем классификацию, находя гиперплоскость, которая очень хорошо различает два класса
Машина опорных векторов: сообщение об ошибке Python
Я относительно новичок в машинном обучении и решил углубиться в теорию, а затем попрактиковаться в коде. В процессе я получил много сообщений об ошибках, которые мне удалось исправить, но я потерялся с этим. Я также относительно новичок в Python, поэтому я уверен, что это какая-то проблема, связанная с синтаксисом, но на этот раз я не смог ее определить (Python 2.7.15). Вот полный код:
импортировать numpy как np
из matplotlib импортировать pyplot как plt
# Затем мы вводим наши данные для [X, Y, Bias] в матрицу, используя метод массива Numpy:
X = np.массив([
[-2, 4,-1],
[2, -2, -1],
[2, 4, -1],
[8,-4,-1],
[9, 4, -1],
])
# Давайте создадим еще одну переменную Y, содержащую выходные метки для каждого элемента в матрице:
Y = np.массив ([-1,-1,1,1,1])
# Теперь давайте построим наши данные. Для этого мы будем использовать цикл For:
для индекса, элемент в перечислении (X):
если индекс <2: plt.scatter (элемент [0], элемент [1], маркер = "_", s = 120, цвет = "r") еще: plt.scatter (элемент [0], элемент [1], маркер = "+", s = 120, цвет = "b") plt.plot([-2,8], [8,0,5]) plt.show() определение svm_sgd_plot (X, Y): # Инициализируем наш вектор весов SVM нулями (3 значения) w = np.zeros (len (X [0])) #Скорость обучения эта = 1 #сколько итераций тренировать эпох = 100000 #хранить ошибочные классификации, чтобы мы могли отобразить, как они меняются с течением времени ошибки = [] #тренировочная часть и часть градиентного спуска для эпохи в диапазоне (1, эпохи): ошибка = 0 для i, x в перечислении (X): #неправильная классификация если (Y[i]*np.dot(X[i],w)) < 1: #misclassified обновление для наших весов w = w + eta * ((X[i] * Y[i]) + (-2 * (1/эпоха) * w)) ошибка = 1 еще: #правильная классификация, обновите наши веса w = w + эта * (-2 * (1/эпоха) * w) error.