مهندسی ویژگی (Feature Engineering)
ساخت ویژگیهای جدید از داده موجود، انتخاب ویژگیهای مهم و اثر آن بر کیفیت مدل
مهندسی ویژگی چیست؟
مهندسی ویژگی یعنی ساخت ویژگیهای جدید و مفید از دادههای موجود، یا انتخاب بهترین زیرمجموعه ویژگیها. گفته میشود «مدل بد با ویژگی خوب، بهتر از مدل خوب با ویژگی بد است!»
۱. ساخت ویژگی جدید
از ترکیب ویژگیهای موجود، ویژگی معنادارتر بسازید:
# از تاریخ تولد و تاریخ امروز → سن
df["age"] = 1404 - df["birth_year"]
# از قیمت و متراژ → قیمت هر متر
df["price_per_meter"] = df["price"] / df["meter"]
# از تاریخ → روز هفته، ماه، تعطیلات
df["month"] = pd.to_datetime(df["date"]).dt.month
۲. تبدیلهای ریاضی
گاهی رابطه واقعی داده، خطی نیست:
- لگاریتم: برای دادههای با دامنه وسیع (درآمد، جمعیت)
- توان دوم:
df["meter2"] = df["meter"] ** 2برای رابطه درجه دو - ریشه: برای کاهش چولگی
۳. ویژگیهای متقابل (Interaction)
# ضرب دو ویژگی که با هم معنا دارند
df["meter_x_rooms"] = df["meter"] * df["rooms"]
۴. انتخاب ویژگی (Feature Selection)
همه ویژگیها مفید نیستند؛ بعضی نویز هستند. روشها:
- همبستگی: ویژگیهای بیارتباط با برچسب را حذف کنید
- اهمیت مدل: درخت تصمیم اهمیت هر ویژگی را میدهد
- حذف ویژگیهای تکراری: دو ویژگی همبسته مثل متر و فوت!
# اهمیت ویژگی با جنگل تصادفی
model = RandomForestClassifier().fit(X, y)
print(model.feature_importances_)
۵. دانش دامنه (Domain Knowledge)
بهترین ویژگیها از شناخت مسئله میآیند. در پیشبینی قیمت خانه، ویژگی «فاصله تا مترو» شاید مهمتر از «تعداد پنجره» باشد!
قبل از ساخت ویژگی پیچیده، همیشه با نمودار
scatter رابطه ویژگی با برچسب را ببینید.جمعبندی
- ویژگی خوب، مدل ساده و دقیق میسازد
- ترکیب، تبدیل ریاضی و دانش دامنه، منابع ساخت ویژگیاند
- ویژگیهای بیارتباط و تکراری را حذف کنید
این مبحث بخشی از دوره آموزش کامل ماشین لرنینگ است.