Вибір Ознак
У багатьох завданнях ви можете мати багато ознак, корисність яких невідома. На щастя, можна навчити модель з усіма ознаками, визначити, які з них не мають впливу, а потім перенавчити модель лише з тими, що мають значення.
Чому варто видаляти ознаки з моделі?
Якщо додати до моделі ознаку, яка не має зв'язку з цільовою змінною, це створить шум у моделі та погіршить прогнозування. Коли ж таких непотрібних ознак багато, шум накопичується, і якість моделі ще більше знижується.
Як визначити, чи ознаки є корисними чи ні?
Як вже відомо, під час навчання клас OLS також обчислює статистичну інформацію. Зокрема, він виконує t-тест, щоб визначити, чи має кожна ознака значущий вплив на цільову змінну. Результати тесту можна знайти у таблиці summary()
, як показано нижче:
import pandas as pd import statsmodels.api as sm file_link='https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/heights_two_feature.csv' df = pd.read_csv(file_link) # Open the file X,y = df[['Father', 'Mother']], df['Height'] # Assign the variables X_tilde = sm.add_constant(X) # Create X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train an OLS object print(regression_model.summary()) #Get the summary
Нас цікавить p-значення для кожної ознаки.
Коротко: чим менше p-значення, тим вища впевненість у впливовості ознаки.
У статистиці необхідно встановити порогове значення p-значення, яке називається рівнем значущості. Зазвичай його встановлюють на рівні 0.05, і якщо p-значення перевищує цей рівень значущості, вважається, що ознака не має суттєвого впливу.
Однак на практиці ознаки з дещо вищим p-значенням, ніж 0.05, також можуть покращувати модель. Тому краще протестувати модель з цією ознакою та без неї, а не одразу видаляти її з моделі, якщо тільки p-значення не є дійсно високим (>0.4). У такому випадку ознаку можна безпечно видалити.
p-значення змінюється від 0 до 1, тому під низьким p-значенням мається на увазі менше ніж 0.05, а під високим p-значенням зазвичай мається на увазі більше ніж 0.3-0.5.
У нашому прикладі ми отримали p-значення для зросту матері та константи 0.087 і 0.051 відповідно. Якщо видалити ознаки з p-значенням > 0.05, отримаємо результат, показаний нижче (ліворуч).
Навіть візуально можна помітити, що модель з константою (праворуч) є кращою, тому не варто її видаляти з моделі.
Зазвичай для впливових ознак при невеликому наборі даних отримують відносно високі p-значення (0.05 до 0.2). P-значення показує впевненість у тому, що ознака є впливовою, і цілком природно, що чим більше у нас спостережень, тим легше відрізнити впливові ознаки від незначущих.
Наприклад, у вас є дані, що 9/10 знайомих вам високих людей щодня їли яблука. Чи можете ви бути впевнені, що це пов'язано? А якщо це було б 9000/10000? Це додасть впевненості у зв'язку.
Як видалити некоректні ознаки?
Потрібно просто видалити стовпець, що відповідає ознаці, з X_tilde
. Це можна зробити за допомогою наступного коду:
X_tilde = X_tilde.drop(___, axis=1)
Наприклад, щоб видалити стовпці 'const' та 'Mother', використовуйте:
X_tilde = X_tilde.drop(['Mother', 'const'], axis=1)
Після цього створіть новий об'єкт OLS з оновленим X_tilde
:
regression_model=sm.OLS(y, X_tilde)
1. Які з ознак слід ЗАЛИШИТИ?
2. Оберіть НЕПРАВИЛЬНЕ твердження.
Дякуємо за ваш відгук!