Feature creation builds new columns from existing data. The best ideas usually come from domain knowledge.
1. Combining features
import pandas as pd
import numpy as np
df = pd.read_csv("Titanic-Dataset.csv")
df["FamilySize"] = df["SibSp"] + df["Parch"] + 1
df["IsAlone"] = (df["FamilySize"] == 1).astype(int)
df["FarePerPerson"] = df["Fare"] / df["FamilySize"]
2. Extracting information from text
Titles like Mr, Mrs, Miss and Master are hidden inside the Name column and are strong predictors of survival.
df["Title"] = df["Name"].str.extract(r",\s*([^\.]+)\.", expand=False).str.strip()
rare = df["Title"].value_counts()[lambda s: s < 10].index
df["Title"] = df["Title"].replace(rare, "Rare") # group very rare titles together
print(df["Title"].value_counts())
3. Date-time features
A raw timestamp is not very useful; its parts often are.
orders = pd.DataFrame({"order_date": pd.to_datetime(["2026-01-15 09:30", "2026-06-20 21:10"])})
orders["year"] = orders["order_date"].dt.year
orders["month"] = orders["order_date"].dt.month
orders["dayofweek"] = orders["order_date"].dt.dayofweek # Monday = 0
orders["is_weekend"] = (orders["dayofweek"] >= 5).astype(int)
orders["hour"] = orders["order_date"].dt.hour
# cyclical encoding
orders["hour_sin"] = np.sin(2 * np.pi * orders["hour"] / 24)
orders["hour_cos"] = np.cos(2 * np.pi * orders["hour"] / 24)
Cyclical encoding tells the model that hour 23 is close to hour 0, which plain integers cannot express.
4. Aggregation features
Summarize groups: average, count, min, max per group.
df["ClassMeanFare"] = df.groupby("Pclass")["Fare"].transform("mean")
df["FareVsClass"] = df["Fare"] - df["ClassMeanFare"]
5. Flag (indicator) features
df["HasCabin"] = df["Cabin"].notnull().astype(int)
df["Age_missing"] = df["Age"].isnull().astype(int)
df["IsChild"] = (df["Age"] < 12).astype(int)
6. Domain-specific ratios
| Domain | Engineered feature |
|---|---|
| Finance | Debt-to-income ratio, credit utilization |
| Health | BMI = weight / height² |
| E-commerce | Average order value, days since last purchase |
| Real estate | Price per square foot, age of building |
| Geography | Distance to city center |
Tips
- Start with features a human expert would naturally look at.
- Compute group statistics (
groupby) from the training set only, otherwise the target or test information may leak in. - Keep track of how every feature is created so you can repeat it in production.