From ea049b6d06c2029ed1db5182e970c0e8afb41e4d Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 7 Jan 2025 21:20:43 +0800 Subject: [PATCH] Add more to 4, took 1.5hr --- 4-data-analytics.md | 202 ++++++++++++++++++++++++++------ assets/4-analytics-binning.webp | Bin 0 -> 27486 bytes 2 files changed, 166 insertions(+), 36 deletions(-) create mode 100644 assets/4-analytics-binning.webp diff --git a/4-data-analytics.md b/4-data-analytics.md index 7bcd2b5..96c5e0c 100644 --- a/4-data-analytics.md +++ b/4-data-analytics.md @@ -1,18 +1,39 @@ -# Data analytics +# Data analytics: Feature engineering +- [Data analytics: Feature engineering](#data-analytics-feature-engineering) + - [Definition](#definition) + - [Sources of features](#sources-of-features) + - [Feature engineering in ML](#feature-engineering-in-ml) + - [Types of feature engineering](#types-of-feature-engineering) + - [Good feature:](#good-feature) + - [Related to objective (important)](#related-to-objective-important) + - [Known at prediction-time](#known-at-prediction-time) + - [Numeric with meaningful magnitude:](#numeric-with-meaningful-magnitude) + - [Have enough samples](#have-enough-samples) + - [Bring human insight to problem](#bring-human-insight-to-problem) + - [Process of Feature Engineering](#process-of-feature-engineering) + - [Scaling](#scaling) + - [Rationale:](#rationale) + - [Methods:](#methods) + - [Normalization or Standardization:](#normalization-or-standardization) + - [Min-max scaling:](#min-max-scaling) + - [Robust scaling:](#robust-scaling) + - [Choosing](#choosing) + - [Discretization / Binning / Bucketing](#discretization-binning-bucketing) + - [Definition](#definition) + - [Reason for binning](#reason-for-binning) + - [Methods](#methods) + - [Equal width binning](#equal-width-binning) + - [Equal frequency binning](#equal-frequency-binning) + - [k means binning](#k-means-binning) + - [decision trees](#decision-trees) + - [Encoding](#encoding) + - [Transformation](#transformation) + - [Generation](#generation) + -- [Data analytics](#data-analytics) - - [Feature engineering](#feature-engineering) - [Definition](#definition) - - [Sources of features](#sources-of-features) - - [Is a part of machine learning, an iterative process](#is-a-part-of-machine-learning-an-iterative-process) - - [Intro](#intro) - - [Types of feature engineering](#types-of-feature-engineering) - - [Good feature:](#good-feature) - -## Feature engineering - -### Definition +## Definition - The process that attempts to create **additional** relevant features from **existing** raw features, to increase the predictive power of **algorithms** @@ -21,11 +42,11 @@ is improved. - Important to machine learning -### Sources of features +## Sources of features - Different features are needed for different problems, even in the same domain -### Feature engineering in ML +## Feature engineering in ML - Process of ML iterations: - Baseline model -> Feature engineering -> Model 2 -> Feature engineering -> @@ -42,26 +63,135 @@ - Highlighting **interactions** between features - Representing the feature in a **different** way -### Good feature: +## Good feature: -- Related to objective (important) - - Example: the number of concrete blocks around it is not related to house - prices -- Known at prediction-time - - Some data could be known **immediately**, and some other data is not known - in **real time**: Can't feed the feature to a model, if it isn't present - at prediction time - - Feature definition shouldn't **change** over time - - Example: If the sales data at prediction time is only available within 3 - days, with a 3 day lag, then current sale data can't be used for training - (that has to predict with a 3-day old data) -- Numeric with meaningful magnitude: - - It does not mean that **categorical** features can't be used in training: - simply, they will need to be **transformed** through a process called - one-hot encoding - - Example: Font category: (Arial, Times New Roman) -- Have enough samples - - Have at least five examples of any value before using it in your model - - If features tend to be poorly assorted and are unbalanced, then the - trained model will be biased -- Bring human insight to problem +### Related to objective (important) + +- Example: the number of concrete blocks around it is not related to house + prices + +### Known at prediction-time + +- Some data could be known **immediately**, and some other data is not known in + **real time**: Can't feed the feature to a model, if it isn't present at + prediction time +- Feature definition shouldn't **change** over time +- Example: If the sales data at prediction time is only available within 3 days, + with a 3 day lag, then current sale data can't be used for training (that has + to predict with a 3-day old data) + +### Numeric with meaningful magnitude: + +- It does not mean that **categorical** features can't be used in training: + simply, they will need to be **transformed** through a process called one-hot + encoding +- Example: Font category: (Arial, Times New Roman) + +### Have enough samples + +- Have at least five examples of any value before using it in your model +- If features tend to be poorly assorted and are unbalanced, then the trained + model will be biased + +### Bring human insight to problem + +- Must have a reason for this feature to be useful, needs **subject matter** and + **curious mind** +- This is an iterative process, need to use **feedback** from production usage + +## Process of Feature Engineering + +### Scaling + +#### Rationale: + +- Leads to a better model, useful when data is uneven: $X1 >> X2$ + +#### Methods: + +##### Normalization or Standardization: + +- $𝑍 = \frac{𝑋−𝜇}{\sigma}$ +- Re-scaled to have a standard normal distribution that centered around 0 with + SD of 1 +- Will **compress** the value in the narrow range, if the variable is skewed, or + has outliers. + - This may impair the prediction + +##### Min-max scaling: + +- $X_{scaled} = \frac{X - min}{max - min}$ +- Also will compress observation + +##### Robust scaling: + +- $X_{scaled} = \frac{X - median}{IQR}$ +- IQR: Interquartile range +- Better at **preserving** the spread + +#### Choosing + +- If data is **not guassain like**, and has a **skewed distribution** or + outliers : Use **robust** scaling, as the other two will compress the data to + a narrow range, which is not ideal +- For **PCA or LDA**(distance or covariance calculation), better to use + **Normalization or Standardization**, since it will remove the effect of + numerical scale, on variance and covariance +- Min-Max scaling: is bound to 0-1, has same drawback as normalization, and new + data may be out of bound (out of original range). This is preferred when the + network prefer a 0-1 **scale** + +### Discretization / Binning / Bucketing + +#### Definition + +- The process of transforming **continuous** variable into **discrete** ones, by + creating a set of continuous interval, that spans over the range of variable's + values +- ![binning diagram](./assets/4-analytics-binning.webp) + +#### Reason for binning + +- Example: Solar energy modeling + - Acelleration calculation, by binning, and reduce the number of simulation + needed +- Improves **performance** by grouping data with **similar attributes** and has + **similar predictive strength** +- Improve **non-linearity**, by being able to capture **non-linear patterns** , + thus improving fitting power of model +- **Interpretability** is enhanced by grouping +- Reduce the impact of **outliers** +- Prevent **overfitting** +- Allow feature **interaction**, with **continuous** variables + +#### Methods + +##### Equal width binning + +- Divide the scope into bins of the same width +- Con: is sensitive to skewed distribution + +##### Equal frequency binning + +- Divides the scope of possible values of variable into N bins, where each bin + carries the same **number** of observations +- Con: May disrupt the relationship with target + +##### k means binning + +- Use k-means to partition the values into clusters +- Con: need hyper-parameter tuning + +##### decision trees + +- Using decision trees to decide the best splitting points +- Observes which bin is more similar than other bins +- Con: + - may cause overfitting + - have a chance of failing: bad performance + +### Encoding + +### Transformation + +### Generation diff --git a/assets/4-analytics-binning.webp b/assets/4-analytics-binning.webp new file mode 100644 index 0000000000000000000000000000000000000000..7de5c3abbcc6ad1fa4845736e70239dd4ead8c56 GIT binary patch literal 27486 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 literal 0 HcmV?d00001