<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sajjad Rahman</title>
    <description>The latest articles on DEV Community by Sajjad Rahman (@sajjadrahman56).</description>
    <link>https://dev.to/sajjadrahman56</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F905098%2Fdf184674-677d-46ab-aa2e-7cc7b1e07033.png</url>
      <title>DEV Community: Sajjad Rahman</title>
      <link>https://dev.to/sajjadrahman56</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sajjadrahman56"/>
    <language>en</language>
    <item>
      <title>ML_Log_Target_PCF</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Sat, 15 Aug 2026 05:14:42 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/mllogtargetpcf-56kc</link>
      <guid>https://dev.to/sajjadrahman56/mllogtargetpcf-56kc</guid>
      <description>&lt;p&gt;# &lt;code&gt;03_ML_Log_Target_PCF.ipynb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This experiment tests &lt;strong&gt;log-transformed PCF as the target&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The important difference from Notebook 02 is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Experiment 01&lt;/th&gt;
&lt;th&gt;Experiment 02&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Experiment 03&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PCF target&lt;/td&gt;
&lt;td&gt;Raw&lt;/td&gt;
&lt;td&gt;Raw&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;log1p(PCF)&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product Weight&lt;/td&gt;
&lt;td&gt;Raw&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Raw&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Train/test split&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Same&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tuning&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evaluation&lt;/td&gt;
&lt;td&gt;MAE/RMSE/R²&lt;/td&gt;
&lt;td&gt;MAE/RMSE/R²&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MAE/RMSE/R² on original PCF scale&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is one crucial technical difference: &lt;strong&gt;the model will train on &lt;code&gt;log1p(PCF)&lt;/code&gt;, but we must convert predictions back to the original PCF scale before calculating MAE, RMSE and R².&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Otherwise, Experiment 03 would not be directly comparable with Experiments 01 and 02.&lt;/p&gt;




&lt;h1&gt;
  
  
  Notebook 03 — &lt;code&gt;03_ML_Log_Target_PCF.ipynb&lt;/code&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Cell 1 — Markdown
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# BEACON Machine Learning — Log Target Experiment&lt;/span&gt;

&lt;span class="gu"&gt;## Experiment 03: Log-Transformed PCF Target&lt;/span&gt;

&lt;span class="gu"&gt;### Purpose&lt;/span&gt;

This experiment investigates whether logarithmic transformation of the
PCF target improves machine-learning prediction performance.

The PCF target is highly right-skewed. Therefore, &lt;span class="sb"&gt;`log1p(PCF)`&lt;/span&gt; is used
during model training to reduce the influence of extreme target values.

Product Weight remains in its original representation.

The experiment follows the same dataset, train-test split,
preprocessing strategy, regression models and evaluation procedure used
in Experiments 01 and 02.

&lt;span class="gu"&gt;### Experimental comparison&lt;/span&gt;

Experiment 01:
&lt;span class="p"&gt;-&lt;/span&gt; Raw PCF target
&lt;span class="p"&gt;-&lt;/span&gt; Raw Product Weight

Experiment 02:
&lt;span class="p"&gt;-&lt;/span&gt; Raw PCF target
&lt;span class="p"&gt;-&lt;/span&gt; Log-transformed Product Weight

Experiment 03:
&lt;span class="p"&gt;-&lt;/span&gt; Log-transformed PCF target
&lt;span class="p"&gt;-&lt;/span&gt; Raw Product Weight

&lt;span class="gu"&gt;### Evaluation&lt;/span&gt;

Models are trained using the logarithmic PCF target. Predictions are
converted back to the original PCF scale using &lt;span class="sb"&gt;`expm1()`&lt;/span&gt; before
calculating MAE, RMSE and R².

This allows the results to remain directly comparable with Experiments
01 and 02.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 2 — Imports
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 1. IMPORT LIBRARIES
# ============================================================
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.model_selection&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;GridSearchCV&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.preprocessing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OneHotEncoder&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.linear_model&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;LinearRegression&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ElasticNet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;BayesianRidge&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.ensemble&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;RandomForestRegressor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ExtraTreesRegressor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;HistGradientBoostingRegressor&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.metrics&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;mean_absolute_error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;mean_squared_error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;r2_score&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;xgboost&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;XGBRegressor&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;category_encoders&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TargetEncoder&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;

&lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filterwarnings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ignore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 3 — Load dataset
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 2. LOAD ORIGINAL CARBON CATALOGUE DATA
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;DATA_PATH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/kaggle/input/datasets/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sajjadrahman56/product-level-of-pcf/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ProductLevel.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;DATA_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;latin1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Original dataset shape:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 4 — Create ML dataset
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 3. CREATE ML DATASET
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;df_ml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Year of reporting&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Company&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Company&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage_Level_CO2e_Available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*Stage-level CO2e available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Country (where company is incorporated)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Company&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s GICS Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product weight (kg)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Protocol used for PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s carbon footprint (PCF, kg CO2e)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ML dataset shape:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 5 — Clean PCF
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 4. CLEAN PCF TARGET
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_numeric&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;coerce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;notna&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;df_ml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Usable rows:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Original PCF summary:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Original PCF skewness:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;skew&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should again have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;866
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 6 — Define X and raw y
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 5. DEFINE FEATURES AND RAW TARGET
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;FEATURES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Company&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage_Level_CO2e_Available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;TARGET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;FEATURES&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;TARGET&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X shape:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;y shape:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 7 — Train/test split
&lt;/h1&gt;

&lt;p&gt;Exactly the same as the first two notebooks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 6. TRAIN / TEST SPLIT
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train_raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_test_raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Training rows:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Testing rows :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Training rows: 692
Testing rows : 174
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 8 — Create safe copies
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 7. CREATE SAFE COPIES
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;X_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;X_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;y_train_raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y_train_raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;y_test_raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y_test_raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 9 — Create log target
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;This is the major change in Notebook 03.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 8. LOG-TRANSFORM PCF TARGET
#
# log1p(x) = log(1 + x)
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;y_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log1p&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_train_raw&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;y_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log1p&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_test_raw&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Raw PCF skewness:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_train_raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;skew&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Log-transformed PCF skewness:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;skew&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Raw PCF skewness: ~15+
Log-transformed PCF skewness: much lower
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 10 — Keep original y for evaluation
&lt;/h1&gt;

&lt;p&gt;This is &lt;strong&gt;very important&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 9. STORE ORIGINAL TARGET FOR FINAL EVALUATION
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;y_test_original&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y_test_raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Training target used by models: log1p(PCF)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Evaluation target: original PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 11 — Country → Region
&lt;/h1&gt;

&lt;p&gt;Same as the previous notebooks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 10. COUNTRY → REGION
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;country_to_region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;# North America
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;USA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North America&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Canada&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North America&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;# Europe
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Germany&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Netherlands&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;United Kingdom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Switzerland&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sweden&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Finland&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Italy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;France&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Spain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Belgium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ireland&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Luxembourg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lithuania&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Greece&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;# East Asia
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Japan&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East Asia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Taiwan&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East Asia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South Korea&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East Asia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;China&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East Asia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;# South Asia
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;India&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South Asia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;# Southeast Asia
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Malaysia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Southeast Asia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Indonesia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Southeast Asia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;# South America
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Brazil&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South America&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Chile&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South America&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Colombia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South America&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;# Africa
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South Africa&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Africa&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;# Oceania
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Australia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Oceania&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country_to_region&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country_to_region&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;inplace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;inplace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 12 — Rare Industry
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 11. RARE INDUSTRY → OTHER
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;industry_counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;rare_industries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;industry_counts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;industry_counts&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;rare_industries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;rare_industries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 13 — PCF Protocol
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 12. PCF PROTOCOL → TOP 5 + OTHER
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;top_protocols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ISO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not reported&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GHGP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAS2050&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TRACI 2.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;isin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;top_protocols&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;isin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;top_protocols&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 14 — Stage-level CO2e
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 13. STAGE-LEVEL CO2e → BINARY
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;binary_map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Yes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage_Level_CO2e_Available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage_Level_CO2e_Available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;binary_map&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage_Level_CO2e_Available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage_Level_CO2e_Available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;binary_map&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 15 — Product Weight winsorisation
&lt;/h1&gt;

&lt;p&gt;Here we return to the &lt;strong&gt;raw Product Weight representation&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 14. PRODUCT WEIGHT — WINSORISATION
#
# No logarithmic transformation is applied to Product Weight
# in Experiment 03.
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;Q1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;quantile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;quantile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;IQR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Q1&lt;/span&gt;

&lt;span class="n"&gt;lower&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;IQR&lt;/span&gt;
&lt;span class="n"&gt;upper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;IQR&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Winsorisation bounds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lower:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Upper:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 16 — Company target encoding
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 15. COMPANY → TARGET ENCODING
#
# IMPORTANT:
# The encoder is fitted using y_train, which is the log PCF
# target in this experiment.
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;te&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TargetEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;cols&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Company&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;min_samples_leaf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;smoothing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;te&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit_transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y_train&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;te&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 17 — One-hot encoding
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 16. ONE-HOT ENCODING
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;categorical_features&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PCF_Protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;encoder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OneHotEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;first&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;handle_unknown&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ignore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;sparse_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;encoded_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;encoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit_transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;categorical_features&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;encoded_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;encoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;categorical_features&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;encoded_train_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;encoded_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;encoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_feature_names_out&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;categorical_features&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;encoded_test_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;encoded_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;encoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_feature_names_out&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;categorical_features&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;categorical_features&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;encoded_train_df&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;X_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;categorical_features&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;encoded_test_df&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 18 — Final feature check
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 17. FINAL FEATURE CHECK
# ============================================================
&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Final X_train shape:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Final X_test shape:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Product Weight present:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Log Product Weight present:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Log_Product_Weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Target transformation: log1p(PCF)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;All features numerical:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select_dtypes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;empty&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product Weight present: True
Log Product Weight present: False
Target transformation: log1p(PCF)
All features numerical: True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 19 — Seven baseline models
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 18. DEFINE BASELINE ML MODELS
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;models&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Linear Regression&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;LinearRegression&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ElasticNet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;ElasticNet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bayesian Ridge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;BayesianRidge&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Random Forest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;RandomForestRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extra Trees&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;ExtraTreesRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HistGradientBoosting&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;HistGradientBoostingRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XGBoost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;XGBRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 20 — Train and evaluate correctly
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;This cell is different from Notebooks 01 and 02.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model predicts log-PCF.&lt;/p&gt;

&lt;p&gt;We convert it back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;log-PCF prediction → expm1() → PCF prediction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then evaluate against original PCF.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 19. BASELINE MODEL EVALUATION
#
# Models are trained on log(PCF).
# Predictions are transformed back to the original PCF scale
# before calculating MAE, RMSE and R².
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;baseline_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Training: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Train using log-transformed target
&lt;/span&gt;    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;y_train&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Predict log-PCF
&lt;/span&gt;    &lt;span class="n"&gt;y_pred_log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;X_test&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Convert predictions back to original PCF scale
&lt;/span&gt;    &lt;span class="n"&gt;y_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expm1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;y_pred_log&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Prevent tiny numerical negative values
&lt;/span&gt;    &lt;span class="n"&gt;y_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;y_pred&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Evaluate on original PCF scale
&lt;/span&gt;    &lt;span class="n"&gt;mae&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mean_absolute_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;y_pred&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;rmse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nf"&gt;mean_squared_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;y_pred&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;r2_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;y_pred&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;baseline_results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mae&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rmse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 21 — Baseline results
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 20. BASELINE RESULTS
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;baseline_results_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;baseline_results&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;baseline_results_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;baseline_results_df&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reset_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;baseline_results_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{:,.2f}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{:,.2f}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{:.4f}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 22 — Models for tuning
&lt;/h1&gt;

&lt;p&gt;Same three as the other experiments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 21. SELECT MODELS FOR HYPERPARAMETER TUNING
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;tuning_models&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Random Forest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;RandomForestRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extra Trees&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;ExtraTreesRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XGBoost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nc"&gt;XGBRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RANDOM_STATE&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Models selected for tuning:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tuning_models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 23 — RF GridSearch
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 22. RANDOM FOREST — GRID SEARCH
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;rf_param_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n_estimators&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;300&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_depth&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;20&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_samples_split&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_samples_leaf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;rf_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GridSearchCV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;estimator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tuning_models&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Random Forest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="n"&gt;param_grid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rf_param_grid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;scoring&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;neg_root_mean_squared_error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;n_jobs&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rf_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y_train&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Best Random Forest parameters:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;rf_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_params_&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 24 — Tuned RF evaluation
&lt;/h1&gt;

&lt;p&gt;Again, convert back to original PCF.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 23. EVALUATE TUNED RANDOM FOREST
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;best_rf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rf_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_estimator_&lt;/span&gt;

&lt;span class="n"&gt;rf_pred_log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;best_rf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rf_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expm1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;rf_pred_log&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rf_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;rf_pred&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rf_mae&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mean_absolute_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;rf_pred&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rf_rmse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;mean_squared_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;rf_pred&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rf_r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;r2_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;rf_pred&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Random Forest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rf_mae&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rf_rmse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²  :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rf_r2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 25 — Extra Trees GridSearch
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 24. EXTRA TREES — GRID SEARCH
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;et_param_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n_estimators&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;300&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_depth&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;20&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_samples_split&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_samples_leaf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;et_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GridSearchCV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;estimator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tuning_models&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extra Trees&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="n"&gt;param_grid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;et_param_grid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;scoring&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;neg_root_mean_squared_error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;n_jobs&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;et_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y_train&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Best Extra Trees parameters:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;et_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_params_&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 26 — Tuned Extra Trees evaluation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 25. EVALUATE TUNED EXTRA TREES
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;best_et&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;et_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_estimator_&lt;/span&gt;

&lt;span class="n"&gt;et_pred_log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;best_et&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;et_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expm1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;et_pred_log&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;et_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;et_pred&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;et_mae&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mean_absolute_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;et_pred&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;et_rmse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;mean_squared_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;et_pred&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;et_r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;r2_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;et_pred&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extra Trees&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;et_mae&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;et_rmse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²  :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;et_r2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 27 — XGBoost GridSearch
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 26. XGBOOST — GRID SEARCH
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;xgb_param_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n_estimators&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;300&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_depth&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;learning_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mf"&gt;0.1&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subsample&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mf"&gt;1.0&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;colsample_bytree&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mf"&gt;1.0&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;xgb_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GridSearchCV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;estimator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tuning_models&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XGBoost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="n"&gt;param_grid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;xgb_param_grid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;scoring&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;neg_root_mean_squared_error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;n_jobs&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;xgb_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y_train&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Best XGBoost parameters:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;xgb_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_params_&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 28 — Tuned XGBoost evaluation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 27. EVALUATE TUNED XGBOOST
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;best_xgb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;xgb_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_estimator_&lt;/span&gt;

&lt;span class="n"&gt;xgb_pred_log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;best_xgb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X_test&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;xgb_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expm1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;xgb_pred_log&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;xgb_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;xgb_pred&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;xgb_mae&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mean_absolute_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;xgb_pred&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;xgb_rmse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;mean_squared_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;xgb_pred&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;xgb_r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;r2_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;y_test_original&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;xgb_pred&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XGBoost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xgb_mae&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xgb_rmse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²  :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xgb_r2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 29 — Tuned comparison
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 28. TUNED MODEL COMPARISON
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;tuned_results_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;

    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Random Forest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rf_mae&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rf_rmse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rf_r2&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extra Trees&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;et_mae&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;et_rmse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;et_r2&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XGBoost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;xgb_mae&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;xgb_rmse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;xgb_r2&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;tuned_results_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tuned_results_df&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reset_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tuned_results_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{:,.2f}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{:,.2f}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{:.4f}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 30 — Baseline vs tuned
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 29. BASELINE VS TUNED
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;baseline_selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;baseline_results_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;baseline_results_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;isin&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Random Forest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extra Trees&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XGBoost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="p"&gt;][&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RMSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;baseline_selected&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Baseline&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;tuned_comparison&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tuned_results_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;tuned_comparison&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tuned&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;baseline_vs_tuned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;baseline_selected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tuned_comparison&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;ignore_index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;baseline_vs_tuned&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 31 — Save baseline results
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 30. SAVE BASELINE RESULTS
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;baseline_results_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;baseline_log_target_pcf_results.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Saved baseline results.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 32 — Save tuned results
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 31. SAVE TUNED RESULTS
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;tuned_results_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tuned_log_target_pcf_results.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Saved tuned results.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 33 — Save hyperparameters
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 32. SAVE BEST HYPERPARAMETERS
# ============================================================
&lt;/span&gt;
&lt;span class="n"&gt;best_parameters_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Random Forest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extra Trees&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XGBoost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Best Parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;rf_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_params_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;et_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_params_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;xgb_grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_params_&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;best_parameters_df&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;best_parameters_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tuned_log_target_pcf_best_parameters.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Cell 34 — Experiment summary
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================================
# 33. EXPERIMENT SUMMARY
# ============================================================
&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXPERIMENT 03 — LOG TARGET PCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Dataset rows:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df_ml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Training rows:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Testing rows:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Target transformation: log1p(PCF)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product Weight transformation: None&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;best_baseline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;baseline_results_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Best baseline model by R²:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;best_baseline&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;→ R² =&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;best_baseline&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;best_tuned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tuned_results_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Best tuned model by R²:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;best_tuned&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;→ R² =&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;best_tuned&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R²&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Cell 35 — Important experiment note
&lt;/h2&gt;

&lt;p&gt;Don't fill this with guesses. Run the notebook first, then insert the actual values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Experiment Summary&lt;/span&gt;

This experiment investigated whether logarithmic transformation of the
PCF target improved prediction performance. The transformation was
motivated by the substantial positive skewness of the PCF distribution.

The same 866 observations, 80/20 train-test split, random state,
feature preprocessing, regression models and evaluation metrics used in
Experiments 01 and 02 were retained to support a controlled comparison.

The PCF target was transformed using &lt;span class="sb"&gt;`log1p(PCF)`&lt;/span&gt; before model training.
Product Weight remained in its original representation, subject only to
the established winsorisation procedure. Model predictions were
converted back to the original PCF scale using &lt;span class="sb"&gt;`expm1()`&lt;/span&gt; before
calculating MAE, RMSE and R².

The strongest baseline model achieved an R² of [XX], while the best
tuned model achieved an R² of [XX].

Compared with the raw-target experiment, the log-target transformation
produced [an improvement / a reduction / a mixed effect] in predictive
performance. These results are used to determine whether target
transformation should be retained in the final machine-learning
configuration.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚠️ One critical point about Notebook 03
&lt;/h2&gt;

&lt;p&gt;There is a subtle issue we need to handle correctly.&lt;/p&gt;

&lt;p&gt;In Notebook 03:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;y_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log1p&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y_train_raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;means &lt;strong&gt;Company target encoding is also being fitted against log-PCF&lt;/strong&gt;, because:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;te&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit_transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;uses the transformed target.&lt;/p&gt;

&lt;p&gt;That is logically consistent with a log-target experiment, but it means the experiment changes &lt;strong&gt;both the modelling target and the target encoding scale&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I do &lt;strong&gt;not&lt;/strong&gt; want you to silently change this now, because your previous notebooks already use target encoding and we want methodological consistency.&lt;/p&gt;

&lt;p&gt;However, when we write the dissertation methodology, we should explicitly document that the target encoding is fitted using the training target representation used by each experiment.&lt;/p&gt;




&lt;h3&gt;
  
  
  Your three notebooks are now cleanly defined
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;01_ML_Baseline_Raw_PCF.ipynb
    Raw PCF
    Raw Product Weight
             ↓
02_ML_Log_Product_Weight.ipynb
    Raw PCF
    Log Product Weight
             ↓
03_ML_Log_Target_PCF.ipynb
    Log PCF
    Raw Product Weight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Run Notebook 03 through Cell 21 first and send me the &lt;code&gt;baseline_results_df&lt;/code&gt;.&lt;/strong&gt; We can then check the baseline before you spend time running all three GridSearchCV experiments.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>BEACON-01</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Fri, 14 Aug 2026 09:01:06 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/beacon-01-519m</link>
      <guid>https://dev.to/sajjadrahman56/beacon-01-519m</guid>
      <description>&lt;p&gt;A simple story of &lt;em&gt;BEACON FRAMEWORK&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is data quality → why it matters → why checking missing values is not enough → why BEACON uses dimensions → where the eight dimensions came from → why the mapping table is necessary → why eight rather than another number → how the 15 rules operationalise the dimensions → how this ultimately connects to ML.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The important methodological basis already established in your project is that the eight dimensions were &lt;strong&gt;synthesised from established data-quality literature/standards and PCF-specific requirements&lt;/strong&gt;, then filtered using three BEACON criteria: &lt;strong&gt;measurability, rule definition and computability&lt;/strong&gt;.  The Feature–Dimension Mapping is explicitly intended to be the conceptual core connecting dataset attributes to rules and automated assessment.&lt;/p&gt;

&lt;p&gt;I would &lt;strong&gt;not&lt;/strong&gt; claim that "8 is the Goldilocks zone" or that eight is objectively the universally correct number for all domain datasets. &lt;strong&gt;Eight&lt;/strong&gt; is the selected BEACON set because it provides the required coverage for this PCF dataset while satisfying the project's objective assessment criteria and avoiding dimensions that could not be operationalised reliably&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Data Quality Matters in Product Carbon Footprint Data:
&lt;/h2&gt;

&lt;p&gt;Understanding the BEACON Framework&lt;/p&gt;

&lt;p&gt;&lt;em&gt;An accessible introduction to why carbon data needs more than a simple missing-value check&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Imagine making an important decision with unreliable information
&lt;/h2&gt;

&lt;p&gt;Imagine that you are comparing two products because you want to understand their environmental impact.&lt;/p&gt;

&lt;p&gt;Product A appears to have a carbon footprint of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;10 kg CO₂e&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Product B appears to have:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;10,000 kg CO₂e&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It would be tempting to conclude that Product B is 1,000 times worse.&lt;/p&gt;

&lt;p&gt;But before making that conclusion, we need to ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are the two products measured using the same basis?&lt;/li&gt;
&lt;li&gt;Are their weights comparable?&lt;/li&gt;
&lt;li&gt;Are the reporting boundaries the same?&lt;/li&gt;
&lt;li&gt;Was the carbon footprint calculated using a recognised method?&lt;/li&gt;
&lt;li&gt;Is the information complete?&lt;/li&gt;
&lt;li&gt;Are the values physically plausible?&lt;/li&gt;
&lt;li&gt;Can the reported figures be traced back to a source?&lt;/li&gt;
&lt;li&gt;Are some countries or industries over-represented?&lt;/li&gt;
&lt;li&gt;Are the descriptions clear enough to understand what the numbers actually represent?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the problem that &lt;strong&gt;data quality&lt;/strong&gt; addresses.&lt;/p&gt;

&lt;p&gt;For Product Carbon Footprint (PCF) data, this is particularly important because poor-quality information can affect not only reporting and sustainability decisions, but also any machine-learning model trained using that information.&lt;/p&gt;

&lt;p&gt;The BEACON framework was developed to provide a systematic way of assessing these issues before PCF data is used for machine learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What does "data quality" actually mean?
&lt;/h2&gt;

&lt;p&gt;Data quality does &lt;strong&gt;not&lt;/strong&gt; simply mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"There are no empty cells."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A dataset can contain no missing values and still be unsuitable for analysis.&lt;/p&gt;

&lt;p&gt;Consider four simple examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 1 — Missing information
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product weight = [missing]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The information is incomplete.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 2 — Impossible information
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product weight = -500 kg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The value exists, but it does not make physical sense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 3 — Inconsistent information
&lt;/h3&gt;

&lt;p&gt;One record says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Country = USA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while another uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;United States
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two may refer to the same country, but inconsistent representations can affect analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 4 — Extreme but legitimate information
&lt;/h3&gt;

&lt;p&gt;A 600-tonne wind turbine can have a very large total PCF.&lt;/p&gt;

&lt;p&gt;That does &lt;strong&gt;not&lt;/strong&gt; automatically mean the value is wrong.&lt;/p&gt;

&lt;p&gt;This last example is particularly important.&lt;/p&gt;

&lt;p&gt;A large PCF should be interpreted alongside the characteristics of the product, because:&lt;/p&gt;

&lt;p&gt;[&lt;br&gt;
PCF = Weight \times Carbon\ Intensity&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;Therefore:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A large number is not necessarily a poor-quality number.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is why data quality requires several perspectives rather than one simple test.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Why do we need "dimensions"?
&lt;/h2&gt;

&lt;p&gt;Think about a medical health check.&lt;/p&gt;

&lt;p&gt;A doctor does not determine someone's health using only their weight.&lt;/p&gt;

&lt;p&gt;Instead, they might consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;blood pressure,&lt;/li&gt;
&lt;li&gt;heart rate,&lt;/li&gt;
&lt;li&gt;temperature,&lt;/li&gt;
&lt;li&gt;blood tests,&lt;/li&gt;
&lt;li&gt;medical history,&lt;/li&gt;
&lt;li&gt;symptoms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each measure examines a different aspect of health.&lt;/p&gt;

&lt;p&gt;Data quality works in a similar way.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;data-quality dimension&lt;/strong&gt; represents a particular aspect of data health.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Completeness&lt;/strong&gt; asks whether important information is present.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;while:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Validity&lt;/strong&gt; asks whether the information follows expected rules.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Plausibility&lt;/strong&gt; asks whether the values make sense in the real world.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These are different questions.&lt;/p&gt;

&lt;p&gt;A dataset could therefore be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100% complete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but still contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;invalid values
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;physically implausible values
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;poorly documented information
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why BEACON does not reduce data quality to a single missing-value check.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Where did BEACON's eight dimensions come from?
&lt;/h2&gt;

&lt;p&gt;A natural question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Did you just invent these eight dimensions?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;But there is an important distinction.&lt;/p&gt;

&lt;p&gt;The eight dimensions are &lt;strong&gt;not claimed as a new universal data-quality standard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead, BEACON &lt;strong&gt;synthesises and adapts established data-quality concepts to the specific requirements of Product Carbon Footprint data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The current BEACON methodology draws on established data-quality frameworks and standards including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wang and Strong's data-quality framework;&lt;/li&gt;
&lt;li&gt;ISO/IEC 25012;&lt;/li&gt;
&lt;li&gt;ISO 8000;&lt;/li&gt;
&lt;li&gt;DAMA data-quality guidance;&lt;/li&gt;
&lt;li&gt;ISO 14067 for Product Carbon Footprints;&lt;/li&gt;
&lt;li&gt;the GHG Protocol Product Standard;&lt;/li&gt;
&lt;li&gt;and the Carbon Catalogue documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is important because different frameworks use different terminology and organise data quality differently.&lt;/p&gt;

&lt;p&gt;Therefore, BEACON does not simply copy one existing framework.&lt;/p&gt;

&lt;p&gt;It asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Which quality aspects are necessary for this particular PCF dataset, and which can actually be assessed objectively and automatically?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. The three BEACON selection criteria
&lt;/h2&gt;

&lt;p&gt;This is one of the strongest parts of your methodology.&lt;/p&gt;

&lt;p&gt;A potential quality dimension was included in BEACON only when it satisfied three requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Measurability
&lt;/h3&gt;

&lt;p&gt;Can we actually measure the quality aspect?&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How many values are missing?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be measured.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Rule Definition
&lt;/h3&gt;

&lt;p&gt;Can we define a clear rule?&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product weight must be greater than zero.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is a rule that can be tested.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Computability
&lt;/h3&gt;

&lt;p&gt;Can the assessment be performed consistently using the BEACON software?&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be evaluated automatically.&lt;/p&gt;

&lt;p&gt;These criteria make the framework more reproducible and reduce subjective judgement. The same three criteria are already established in your Feature–Dimension Mapping methodology. &lt;/p&gt;

&lt;h2&gt;
  
  
  5. So what are BEACON's eight dimensions?
&lt;/h2&gt;

&lt;p&gt;The resulting BEACON dimensions are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;In simple terms&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Completeness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is the required information there?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Validity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the information follow the expected rules?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consistency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is information represented consistently?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plausibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does it make sense in the real world?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can we understand where the information came from?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Timeliness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is the information temporally appropriate?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interpretability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can a person understand what the information means?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Representativeness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the dataset adequately reflect the products, industries and regions it claims to represent?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These definitions are consistent with the current BEACON methodology.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Why does each dimension matter?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Completeness
&lt;/h3&gt;

&lt;p&gt;Imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product Weight = missing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may not be able to properly interpret the PCF.&lt;/p&gt;

&lt;p&gt;Completeness therefore asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Do we have the information needed to use the data?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Validity
&lt;/h3&gt;

&lt;p&gt;Suppose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Year = "banana"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Weight = -50 kg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The value exists, but it does not satisfy the expected rules.&lt;/p&gt;

&lt;p&gt;Validity asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is the value structurally and logically acceptable?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Consistency
&lt;/h3&gt;

&lt;p&gt;Suppose the same concept appears as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USA
United States
US
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or different records use incompatible representations.&lt;/p&gt;

&lt;p&gt;Consistency asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Are similar pieces of information represented in a compatible way?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Plausibility
&lt;/h3&gt;

&lt;p&gt;This is particularly important for PCF data.&lt;/p&gt;

&lt;p&gt;Suppose we see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PCF = 3,700,000 kg CO₂e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number looks enormous.&lt;/p&gt;

&lt;p&gt;But then we discover:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product = large wind turbine
Weight = 600,000 kg
Carbon intensity ≈ 6.2 kg CO₂e/kg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The large PCF can be explained by the product's physical scale.&lt;/p&gt;

&lt;p&gt;Therefore, plausibility is not simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Is this number large?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Does this number make sense given the context and relationships between relevant variables?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This insight became particularly important during the BEACON development and synthetic-data investigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Traceability
&lt;/h3&gt;

&lt;p&gt;Imagine a company reports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PCF = 2,500 kg CO₂e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but provides no information about how the number was obtained.&lt;/p&gt;

&lt;p&gt;Can an analyst verify it?&lt;/p&gt;

&lt;p&gt;Can another researcher reproduce it?&lt;/p&gt;

&lt;p&gt;Traceability therefore asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can the origin or methodology of the information be understood and checked?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For PCF reporting, this is particularly important because methodological information such as the reporting protocol and data source provides context for interpreting the footprint.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Timeliness
&lt;/h3&gt;

&lt;p&gt;Carbon information can change over time.&lt;/p&gt;

&lt;p&gt;Emission factors, technologies, manufacturing processes and reporting practices may change.&lt;/p&gt;

&lt;p&gt;Timeliness therefore asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is the temporal information appropriate for the intended use?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An important BEACON design decision is that the Carbon Catalogue is a historical/static dataset, so the freshness rule is retained in the rule library but is not meaningfully executed against the historical benchmark. &lt;/p&gt;

&lt;p&gt;This is a good example of why not every possible quality check should automatically be applied to every dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Interpretability
&lt;/h3&gt;

&lt;p&gt;A number without context can be difficult to understand.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PCF = 500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What does 500 mean?&lt;/p&gt;

&lt;p&gt;What product?&lt;/p&gt;

&lt;p&gt;What functional unit?&lt;/p&gt;

&lt;p&gt;What reporting boundary?&lt;/p&gt;

&lt;p&gt;What methodology?&lt;/p&gt;

&lt;p&gt;Interpretability therefore asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can a human understand what the data represents?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  8. Representativeness
&lt;/h3&gt;

&lt;p&gt;Imagine a dataset contains products almost entirely from one country and one industry.&lt;/p&gt;

&lt;p&gt;The dataset may be complete and internally consistent.&lt;/p&gt;

&lt;p&gt;But can we confidently use it to represent a much broader population?&lt;/p&gt;

&lt;p&gt;Representativeness asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Does the dataset provide adequate coverage of the products, industries and geographical contexts relevant to the analysis?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is especially important for machine learning because a model can learn the characteristics of the data it receives.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Why not use 15 dimensions?
&lt;/h2&gt;

&lt;p&gt;Another reasonable question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"If ISO has many characteristics, why did BEACON only use eight?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is &lt;strong&gt;not&lt;/strong&gt; that eight is mathematically optimal.&lt;/p&gt;

&lt;p&gt;Instead, BEACON uses eight because the framework is intended to provide &lt;strong&gt;sufficient coverage without introducing dimensions that cannot be meaningfully and reproducibly assessed for the Carbon Catalogue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Some concepts from larger data-quality models overlap when operationalised for this dataset.&lt;/p&gt;

&lt;p&gt;For example, several detailed technical characteristics can be represented through broader operational categories such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Validity
Consistency
Plausibility
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;rather than creating a separate BEACON dimension for every possible characteristic.&lt;/p&gt;

&lt;p&gt;At the other extreme, using only a few broad dimensions could hide important PCF-specific concerns such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Traceability
Interpretability
Representativeness
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Therefore, the selection was guided by:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Established research
       +
PCF-specific requirements
       +
Carbon Catalogue characteristics
       +
Measurability
       +
Rule definition
       +
Computability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting eight dimensions are therefore a &lt;strong&gt;purpose-built operational set&lt;/strong&gt;, not a claim that all data-quality research should use exactly eight dimensions.&lt;/p&gt;

&lt;p&gt;That distinction is important for your dissertation.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Why can't we just apply all eight dimensions to every column?
&lt;/h2&gt;

&lt;p&gt;This leads to one of the most important ideas in BEACON:&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature–Dimension Mapping
&lt;/h2&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product Weight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It makes sense to ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Is it complete?
Is it valid?
Is it consistent?
Is it plausible?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it makes much less sense to apply exactly the same questions to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product Name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, you can assess whether a product name is present and interpretable.&lt;/p&gt;

&lt;p&gt;But asking whether a product name is "physically plausible" is meaningless.&lt;/p&gt;

&lt;p&gt;Therefore:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Not every dimension applies to every feature.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;BEACON explicitly maps each dataset feature to the dimensions that are relevant to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Why is the mapping table necessary?
&lt;/h2&gt;

&lt;p&gt;The mapping table is not just documentation.&lt;/p&gt;

&lt;p&gt;It is the &lt;strong&gt;bridge between the concept and the software&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Without the mapping, we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8 dimensions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;25 dataset features
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but no systematic explanation of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Which quality check applies to which feature?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The mapping solves this.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product Weight
      ↓
Completeness
Validity
Consistency
Plausibility
      ↓
Relevant validation rules
      ↓
Automated checks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product Name
      ↓
Completeness
Interpretability
      ↓
Relevant validation rules
      ↓
Automated checks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes BEACON's decisions transparent.&lt;/p&gt;

&lt;p&gt;The current project documentation explicitly describes the mapping as the conceptual core connecting features, dimensions, validation rules, metrics and automated assessment.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. From the mapping table to 15 rules
&lt;/h2&gt;

&lt;p&gt;The mapping tells us:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What should be assessed?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The rules tell us:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How should it be assessed?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feature
   ↓
Product Weight
   ↓
Plausibility
   ↓
Range Validation
   ↓
Is weight &amp;gt; 0?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feature
   ↓
PCF + Weight + Carbon Intensity
   ↓
Plausibility
   ↓
Cross-Field Validation
   ↓
Is PCF consistent with Weight × CI?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why BEACON does not contain 25 × 8 = 200 independent checks.&lt;/p&gt;

&lt;p&gt;Instead, it uses &lt;strong&gt;reusable generic rule patterns&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The current methodology defines 15 rule patterns, of which 14 are executed for the historical Carbon Catalogue because R12 Freshness is not applicable in that context. &lt;/p&gt;

&lt;h2&gt;
  
  
  11. What are the 15 rules actually doing?
&lt;/h2&gt;

&lt;p&gt;At a high level:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;th&gt;What it asks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R01&lt;/strong&gt; Missing Value Check&lt;/td&gt;
&lt;td&gt;Is required information present?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R02&lt;/strong&gt; Data Type Validation&lt;/td&gt;
&lt;td&gt;Is the data stored in the expected form?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R03&lt;/strong&gt; Domain Validation&lt;/td&gt;
&lt;td&gt;Are values within allowed domains?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R04&lt;/strong&gt; Controlled Vocabulary&lt;/td&gt;
&lt;td&gt;Are categories represented consistently?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R05&lt;/strong&gt; Measurement Unit&lt;/td&gt;
&lt;td&gt;Are units handled consistently?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R06&lt;/strong&gt; Range Validation&lt;/td&gt;
&lt;td&gt;Are numerical values within reasonable ranges?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R07&lt;/strong&gt; Cross-Field Validation&lt;/td&gt;
&lt;td&gt;Do related fields make sense together?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R08&lt;/strong&gt; Identifier Uniqueness&lt;/td&gt;
&lt;td&gt;Are identifiers unique where required?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R09&lt;/strong&gt; Provenance Verification&lt;/td&gt;
&lt;td&gt;Is supporting source/method information available?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R10&lt;/strong&gt; Metadata Availability&lt;/td&gt;
&lt;td&gt;Is relevant metadata present?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R11&lt;/strong&gt; Date Validation&lt;/td&gt;
&lt;td&gt;Are reporting dates valid?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R12&lt;/strong&gt; Freshness Assessment&lt;/td&gt;
&lt;td&gt;Is the information sufficiently current?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R13&lt;/strong&gt; Documentation Check&lt;/td&gt;
&lt;td&gt;Is descriptive information adequately documented?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R14&lt;/strong&gt; Category Coverage&lt;/td&gt;
&lt;td&gt;Are relevant categories represented?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;R15&lt;/strong&gt; Distribution Assessment&lt;/td&gt;
&lt;td&gt;Is the dataset distribution sufficiently representative?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are &lt;strong&gt;generic rule patterns&lt;/strong&gt;, not 15 completely independent algorithms. Each reusable validation function operates over the features identified by the Feature–Dimension Mapping. &lt;/p&gt;

&lt;h2&gt;
  
  
  12. Why does BEACON use rules instead of simply asking an analyst to inspect the data?
&lt;/h2&gt;

&lt;p&gt;Because manual inspection is difficult to reproduce.&lt;/p&gt;

&lt;p&gt;Imagine two researchers inspecting the same 866 records.&lt;/p&gt;

&lt;p&gt;Researcher A might say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks suspicious."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Researcher B might say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks acceptable."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A rule-based framework attempts to make the decision process explicit.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IF Product Weight &amp;lt;= 0
THEN fail plausibility/validity check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IF required field is missing
THEN fail completeness check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IF PCF is inconsistent with related physical/carbon values
THEN flag for investigation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the assessment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repeatable,&lt;/li&gt;
&lt;li&gt;auditable,&lt;/li&gt;
&lt;li&gt;explainable,&lt;/li&gt;
&lt;li&gt;automatable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13. Does BEACON automatically "fix" everything?
&lt;/h2&gt;

&lt;p&gt;No — and this is an important design principle.&lt;/p&gt;

&lt;p&gt;Finding a problem and knowing the correct replacement value are two different things.&lt;/p&gt;

&lt;p&gt;Suppose BEACON finds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Country = "U.S.A."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and the controlled vocabulary uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;United States
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Standardisation may be straightforward.&lt;/p&gt;

&lt;p&gt;But suppose BEACON finds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PCF = 87,589 kg CO₂e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and determines that it is extreme.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; mean that BEACON should invent a new PCF value.&lt;/p&gt;

&lt;p&gt;The correct action may be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Investigate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Flag for review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;rather than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automatically change the number
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction protects the integrity of the original evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. This is particularly important for PCF data
&lt;/h2&gt;

&lt;p&gt;During the BEACON development, an important issue emerged.&lt;/p&gt;

&lt;p&gt;A large PCF value may initially appear suspicious.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;600,000 kg product
+
6.2 kg CO₂e/kg
=
approximately 3.7 million kg CO₂e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The absolute PCF is very large.&lt;/p&gt;

&lt;p&gt;But the value is explainable through the product's physical scale.&lt;/p&gt;

&lt;p&gt;Therefore, BEACON should not simply say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Large PCF = bad."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Does the PCF make sense in relation to the relevant product and carbon characteristics?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the role of domain-aware plausibility and cross-field validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. What happens after all the rules run?
&lt;/h2&gt;

&lt;p&gt;BEACON produces evidence at several levels.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Individual validation
        ↓
Rule score
        ↓
Dimension score
        ↓
Overall BEACON Quality Score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;R06 Range Validation
        ↓
62.63%

R07 Cross-Field Validation
        ↓
84.99%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are then aggregated into dimension-level scores and ultimately the overall score.&lt;/p&gt;

&lt;p&gt;Your current implementation produces a Rule Evaluation Matrix, dimension scores, and an Issue Register. &lt;/p&gt;

&lt;h2&gt;
  
  
  16. Why have an overall score if the individual rules are more informative?
&lt;/h2&gt;

&lt;p&gt;The overall score provides a &lt;strong&gt;summary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine a manager wants a quick answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How strong is this dataset overall?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A single score is useful.&lt;/p&gt;

&lt;p&gt;But an overall score alone is insufficient for diagnosis.&lt;/p&gt;

&lt;p&gt;Therefore BEACON deliberately provides both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Overall score
      +
Dimension scores
      +
Rule scores
      +
Issue-level evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of it like a medical check-up again.&lt;/p&gt;

&lt;p&gt;You might receive:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Overall health assessment: Good&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;but the doctor still tells you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Blood pressure needs attention.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The summary and the detailed diagnosis serve different purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Why is the mapping table so important to the whole architecture?
&lt;/h2&gt;

&lt;p&gt;Because it creates a chain of accountability:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Research literature
       ↓
Quality dimension
       ↓
BEACON feature
       ↓
Feature–Dimension Mapping
       ↓
Validation rule
       ↓
Metric
       ↓
Python implementation
       ↓
Evidence
       ↓
Quality score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every important decision can therefore be traced backwards.&lt;/p&gt;

&lt;p&gt;For example, an examiner can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why did you assess Product Weight for plausibility?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product Weight
↓
Physical characteristic
↓
Plausibility applicable
↓
Range rule
↓
Physical/empirical threshold
↓
Automated validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is far stronger than saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We thought it would be useful."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  18. Why eight dimensions rather than five?
&lt;/h2&gt;

&lt;p&gt;With only five broad dimensions, some PCF-specific concerns could become hidden.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Traceability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;could disappear inside a broad "quality" category.&lt;/p&gt;

&lt;p&gt;Likewise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Representativeness
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is important when a dataset is used for machine learning across industries and countries.&lt;/p&gt;

&lt;p&gt;BEACON therefore keeps these concepts visible because they have different practical implications.&lt;/p&gt;

&lt;h2&gt;
  
  
  19. Why not twelve?
&lt;/h2&gt;

&lt;p&gt;The opposite problem is fragmentation.&lt;/p&gt;

&lt;p&gt;If every subtle characteristic became its own dimension, the framework could become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;harder to implement
harder to explain
harder to score
harder to maintain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and potentially contain overlapping concepts.&lt;/p&gt;

&lt;p&gt;BEACON therefore groups related quality concerns where they can be assessed through a common operational concept.&lt;/p&gt;

&lt;p&gt;Again, the important claim is &lt;strong&gt;not&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Eight is universally optimal."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The defensible claim is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Eight dimensions provided the selected operational coverage required for the Carbon Catalogue while meeting the predefined measurability, rule-definition and computability criteria."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the wording I would use in your dissertation.&lt;/p&gt;

&lt;h2&gt;
  
  
  20. What does this mean for machine learning?
&lt;/h2&gt;

&lt;p&gt;This is ultimately why BEACON exists in your project.&lt;/p&gt;

&lt;p&gt;Machine learning models learn patterns from the data they receive.&lt;/p&gt;

&lt;p&gt;If the input contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;missing values
inconsistent categories
invalid values
poorly documented observations
unrepresentative distributions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then the model may learn patterns that do not generalise well.&lt;/p&gt;

&lt;p&gt;BEACON therefore sits &lt;strong&gt;before the ML stage&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PCF Data
   ↓
BEACON
   ↓
Quality assessment
   ↓
Quality treatment
   ↓
Reassessment
   ↓
ML-ready dataset
   ↓
Machine Learning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your research then asks whether this quality-assurance process actually changes predictive performance.&lt;/p&gt;

&lt;p&gt;That is where your RQ3 becomes important.&lt;/p&gt;

&lt;h2&gt;
  
  
  21. The final BEACON idea in one picture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  PRODUCT CARBON DATA
                          │
                          ▼
                 "Can we trust this?"
                          │
          ┌───────────────┼────────────────┐
          │               │                │
          ▼               ▼                ▼
     Completeness      Validity       Consistency
          │               │                │
          ├───────────────┼────────────────┤
          │               │                │
          ▼               ▼                ▼
    Plausibility     Traceability     Timeliness
          │               │                │
          └───────────────┼────────────────┘
                          │
                 Interpretability
                          │
                 Representativeness
                          │
                          ▼
                FEATURE–DIMENSION
                     MAPPING
                          │
                          ▼
                    15 RULES
                          │
                          ▼
                 AUTOMATED CHECKS
                          │
                          ▼
                 QUALITY EVIDENCE
                          │
              ┌───────────┴───────────┐
              ▼                       ▼
          Score / Diagnose        Issue Register
                                      │
                                      ▼
                              Justified Treatment
                                      │
                                      ▼
                                  Reassess
                                      │
                                      ▼
                              ML EVALUATION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  22. The key message for a non-technical reader
&lt;/h2&gt;

&lt;p&gt;If someone remembers only one thing from this article, it should be this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good data is not simply data with no empty cells.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For Product Carbon Footprints, good-quality data should be:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;complete enough to use, valid enough to trust, consistent enough to compare, plausible enough to make sense, traceable enough to verify, timely enough for its purpose, understandable enough to interpret, and representative enough for the population being studied.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BEACON brings these perspectives together into a structured assessment process.&lt;/p&gt;

&lt;p&gt;The eight dimensions are &lt;strong&gt;not claimed as a universal replacement for existing data-quality standards&lt;/strong&gt;. They are a &lt;strong&gt;PCF-focused synthesis&lt;/strong&gt;, selected from established research and standards and filtered according to whether they can be measured, expressed as rules and implemented computationally.&lt;/p&gt;

&lt;p&gt;And the &lt;strong&gt;Feature–Dimension Mapping is the key bridge&lt;/strong&gt;: it prevents BEACON from applying arbitrary checks to every column and instead establishes which quality questions are meaningful for each type of PCF information.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding SQL Server Platform Choices</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Sun, 02 Aug 2026 02:01:30 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/understanding-sql-server-platform-choices-52li</link>
      <guid>https://dev.to/sajjadrahman56/understanding-sql-server-platform-choices-52li</guid>
      <description>&lt;p&gt;Understand the difference between IaaS and PaaS and know when each SQL platform is used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Should I Learn This?
&lt;/h2&gt;

&lt;p&gt;Imagine you have designed a database.&lt;/p&gt;

&lt;p&gt;The next question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Where will I run this database?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Microsoft offers several SQL platforms, and each platform  provides a different type of control and responsibility.&lt;/p&gt;

&lt;p&gt;This blog is &lt;strong&gt;not about writing SQL queries&lt;/strong&gt;. It is about understanding &lt;strong&gt;where SQL Server runs&lt;/strong&gt; and &lt;strong&gt;who manages it&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, Understand Cloud Computing
&lt;/h2&gt;

&lt;p&gt;Suppose you want to open a restaurant. There are two choices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1 — Build Everything Yourself
&lt;/h3&gt;

&lt;p&gt;You buy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Land&lt;/li&gt;
&lt;li&gt;Building&lt;/li&gt;
&lt;li&gt;Kitchen&lt;/li&gt;
&lt;li&gt;Electricity&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Furniture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You maintain everything yourself. This is similar to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Infrastructure as a Service (IaaS)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You have maximum control. You also have maximum responsibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2 — Rent a Fully Managed Restaurant
&lt;/h3&gt;

&lt;p&gt;The owner provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building&lt;/li&gt;
&lt;li&gt;Electricity&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You only cook food. This is similar to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Platform as a Service (PaaS)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You focus on your application instead of infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Diagram
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiamm0czzelv05i3gkl7t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiamm0czzelv05i3gkl7t.png" alt="Iaas vs Paas images" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The diagram has two axes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Horizontal Axis
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;On-Premises ------------------------&amp;gt; Cloud
(More Control)                   (Less Administration)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you move to the right:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft manages more.&lt;/li&gt;
&lt;li&gt;You manage less.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Vertical Axis
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Higher Cost
↑
|
|
Lower Cost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More dedicated resources = Higher cost&lt;/li&gt;
&lt;li&gt;More shared cloud resources = Lower cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Platform 1 — SQL Server (On-Premises)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Company
↓
Own Physical Server
↓
Install Windows
↓
Install SQL Server
↓
Create Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Who manages everything?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;You.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buy hardware&lt;/li&gt;
&lt;li&gt;Install operating system&lt;/li&gt;
&lt;li&gt;Install SQL Server&lt;/li&gt;
&lt;li&gt;Configure networking&lt;/li&gt;
&lt;li&gt;Configure security&lt;/li&gt;
&lt;li&gt;Backup database&lt;/li&gt;
&lt;li&gt;Patch SQL Server&lt;/li&gt;
&lt;li&gt;Replace failed hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maximum control&lt;/li&gt;
&lt;li&gt;Full customization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Disadvantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expensive&lt;/li&gt;
&lt;li&gt;Time-consuming&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - Requires database administrators (DBAs)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Platform 2 — SQL Server on Azure Virtual Machine (IaaS)
&lt;/h2&gt;

&lt;p&gt;Microsoft gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A virtual machine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You install:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows or Linux&lt;/li&gt;
&lt;li&gt;SQL Server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;p&gt;✔ Configure SQL Server&lt;br&gt;
✔ Patch SQL Server&lt;br&gt;
✔ Configure backups&lt;br&gt;
✔ Manage security&lt;br&gt;
✔ Performance tuning&lt;/p&gt;
&lt;h3&gt;
  
  
  Microsoft manages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Physical servers&lt;/li&gt;
&lt;li&gt;Azure networking&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Data center&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of this as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Renting a computer instead of buying one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Platform 3 — Azure SQL Database (PaaS)
&lt;/h2&gt;

&lt;p&gt;Microsoft already provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Server&lt;/li&gt;
&lt;li&gt;Operating System&lt;/li&gt;
&lt;li&gt;Updates&lt;/li&gt;
&lt;li&gt;Automatic Backups&lt;/li&gt;
&lt;li&gt;High Availability&lt;/li&gt;
&lt;li&gt;Hardware&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You only create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Indexes&lt;/li&gt;
&lt;li&gt;Views&lt;/li&gt;
&lt;li&gt;Stored Procedures&lt;/li&gt;
&lt;li&gt;Constraints&lt;/li&gt;
&lt;li&gt;Data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your focus becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Database Design&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;instead of&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Server Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Platform 4 — Azure SQL Managed Instance
&lt;/h2&gt;

&lt;p&gt;Imagine your company already has a large SQL Server application. It uses advanced SQL Server features. Moving directly to Azure SQL Database may require application changes.&lt;/p&gt;

&lt;p&gt;Azure SQL Managed Instance solves this problem.&lt;/p&gt;

&lt;p&gt;It provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Almost complete SQL Server compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;while Microsoft still manages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infrastructure&lt;/li&gt;
&lt;li&gt;Updates&lt;/li&gt;
&lt;li&gt;Backups&lt;/li&gt;
&lt;li&gt;High Availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SQL Server in the cloud with minimal application changes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Comparing IaaS and PaaS
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;IaaS&lt;/th&gt;
&lt;th&gt;PaaS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Physical Server&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Virtual Machine&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operating System&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Server Installation&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Updates&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backups&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database Design&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tables&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Views&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stored Procedures&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Easy Way to Remember
&lt;/h2&gt;
&lt;h3&gt;
  
  
  IaaS
&lt;/h3&gt;

&lt;p&gt;"I manage the server."&lt;/p&gt;
&lt;h3&gt;
  
  
  PaaS
&lt;/h3&gt;

&lt;p&gt;"I manage the database."&lt;/p&gt;
&lt;h2&gt;
  
  
  Real-Life Example
&lt;/h2&gt;

&lt;p&gt;Imagine you work as a database developer.&lt;/p&gt;

&lt;p&gt;Your manager says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Don't waste time installing Windows or patching SQL Server.&lt;br&gt;
Just design the database."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which platform should you choose?&lt;/p&gt;

&lt;p&gt;Answer:  &lt;strong&gt;Azure SQL Database (PaaS)&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  DP-800 Exam Tips
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which platform reduces infrastructure management?"&lt;br&gt;
Answer:  &lt;strong&gt;Azure SQL Database (PaaS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Which platform gives maximum control over SQL Server?"&lt;br&gt;
Answer:  &lt;strong&gt;SQL Server on Azure Virtual Machine (IaaS)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SQL Server (On-Premises) → You manage everything.&lt;/li&gt;
&lt;li&gt;SQL Server on Azure VM → Microsoft manages hardware, you manage the VM and SQL Server.&lt;/li&gt;
&lt;li&gt;Azure SQL Database → Microsoft manages the infrastructure; you focus on database development.&lt;/li&gt;
&lt;li&gt;Azure SQL Managed Instance → Similar to Azure SQL Database, but designed for easier migration of existing SQL Server applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✔ IaaS = More control, more administration.&lt;/li&gt;
&lt;li&gt;✔ PaaS = Less administration, more focus on database development.&lt;/li&gt;
&lt;li&gt;✔ Microsoft manages the infrastructure in PaaS.&lt;/li&gt;
&lt;li&gt;✔ Developers mainly work with tables, indexes, views, stored procedures, and data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now moving forward.........................&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The Hyperscale service tier eliminates many of the practical limitations traditionally associated with cloud databases..."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A beginner like me immediately asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is a &lt;strong&gt;service tier&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;strong&gt;Hyperscale&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;What is a &lt;strong&gt;node&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;strong&gt;storage architecture&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;What is a &lt;strong&gt;replica&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;What is a &lt;strong&gt;read-intensive workload&lt;/strong&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft explains &lt;strong&gt;Hyperscale&lt;/strong&gt;, but assumes you already know the other five concepts.&lt;/p&gt;

&lt;p&gt;Before We Begin. Remember this:&lt;/p&gt;

&lt;p&gt;A database has two parts.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Part 1&lt;/em&gt; : &lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Hardware&lt;/li&gt;
&lt;li&gt; Network&lt;/li&gt;
&lt;li&gt; Operating System&lt;/li&gt;
&lt;li&gt; SQL Server installation&lt;/li&gt;
&lt;li&gt; Updates&lt;/li&gt;
&lt;li&gt; Backups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-&lt;em&gt;Part 2&lt;/em&gt; : &lt;strong&gt;Database&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Views&lt;/li&gt;
&lt;li&gt;Indexes&lt;/li&gt;
&lt;li&gt;Stored Procedures&lt;/li&gt;
&lt;li&gt;Data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference between Microsoft's SQL platforms is simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Who manages Part 1?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Azure SQL Database
&lt;/h2&gt;
&lt;h3&gt;
  
  
  What is Azure SQL Database?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Azure SQL Database is Microsoft's fully managed cloud database&lt;/li&gt;
&lt;li&gt;You do NOT install SQL Server&lt;/li&gt;
&lt;li&gt;You do NOT patch Windows. &lt;/li&gt;
&lt;li&gt;You do NOT replace failed hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft does all of that. You simply create databases and write SQL.&lt;/p&gt;

&lt;p&gt;Think of it as: &lt;em&gt;Google Docs&lt;/em&gt; instead of &lt;em&gt;Installing Microsoft Word&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  What does Fully Managed mean?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Microsoft manages:&lt;/em&gt;&lt;br&gt;
✔ Hardware&lt;br&gt;
✔ Network&lt;br&gt;
✔ Operating System&lt;br&gt;
✔ SQL Server Updates&lt;br&gt;
✔ Automatic Backup&lt;br&gt;
✔ High Availability&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You manage&lt;/em&gt;&lt;br&gt;
✔ Tables&lt;br&gt;
✔ Data&lt;br&gt;
✔ Views&lt;br&gt;
✔ Stored Procedures&lt;br&gt;
✔ Indexes&lt;/p&gt;
&lt;h2&gt;
  
  
  What is a Service Tier?
&lt;/h2&gt;

&lt;p&gt;Imagine buying a mobile internet package.&lt;/p&gt;

&lt;p&gt;Basic Package&lt;br&gt;
↓&lt;br&gt;
Professional Package&lt;br&gt;
↓&lt;br&gt;
Unlimited Package&lt;/p&gt;

&lt;p&gt;Azure SQL Database also has different plans. These are called&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service Tiers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each tier gives different performance.&lt;/p&gt;
&lt;h2&gt;
  
  
  Hyperscale
&lt;/h2&gt;

&lt;p&gt;Microsoft writes&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hyperscale removes storage limits.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's understand. Suppose your database grows like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10 GB
↓
100 GB
↓
2 TB
↓
20 TB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many traditional databases eventually reach storage or performance limits. &lt;strong&gt;&lt;em&gt;Hyperscale&lt;/em&gt;&lt;/strong&gt; is designed to keep growing without needing to redesign your database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;p&gt;✔ Storage automatically grows&lt;/p&gt;

&lt;p&gt;✔ No predefined maximum size&lt;/p&gt;

&lt;p&gt;✔ Pay only for what you use&lt;/p&gt;

&lt;p&gt;✔ Better performance for very large databases&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Replica?
&lt;/h2&gt;

&lt;p&gt;Imagine 1,000 people want to read the same book. One copy of the book becomes crowded. Instead, the library creates five copies. Now everyone can read simultaneously.&lt;/p&gt;

&lt;p&gt;Those extra copies are called &lt;strong&gt;Replicas&lt;/strong&gt; They mainly help with &lt;strong&gt;Read Operations&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read Workload
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;SELECT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reading data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write Workload
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt;
&lt;span class="k"&gt;UPDATE&lt;/span&gt;
&lt;span class="k"&gt;DELETE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Changing data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read-intensive workload
&lt;/h2&gt;

&lt;p&gt;Most users are reading data rather than changing it.&lt;/p&gt;

&lt;p&gt;Example News website: Thousands of people reading Very few people editing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless
&lt;/h2&gt;

&lt;p&gt;Suppose nobody connects to your database.&lt;/p&gt;

&lt;p&gt;Traditional Server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Running

↓
Consumes CPU
↓
Costs Money
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Serverless&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nobody connected?
↓
Automatically Pause
↓
No Compute Charges
↓
Someone connects
↓
Automatically Resume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This reduces costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does Microsoft mention Retry Logic?
&lt;/h2&gt;

&lt;p&gt;When a paused database wakes up, it needs a few seconds. Your application should automatically retry the connection instead of immediately showing an error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatic Tuning
&lt;/h2&gt;

&lt;p&gt;Normally, a DBA analyzes slow queries. Creates indexes. Improves performance.&lt;/p&gt;

&lt;p&gt;Azure SQL Database can do much of this automatically.&lt;/p&gt;

&lt;p&gt;Think of it as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Database
↓
Detect Slow Query
↓
Recommend Index
↓
Sometimes Create It Automatically
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  High Availability
&lt;/h2&gt;

&lt;p&gt;Suppose one server fails. Microsoft automatically switches your database to another server. Users usually don't notice.Microsoft guarantees 99.99% availability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Azure SQL Managed Instance
&lt;/h2&gt;

&lt;p&gt;Instead of saying&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Near 100% compatibility...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine your company already has a SQL Server application.&lt;/p&gt;

&lt;p&gt;It uses&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Server Agent&lt;/li&gt;
&lt;li&gt;Linked Servers&lt;/li&gt;
&lt;li&gt;Database Mail&lt;/li&gt;
&lt;li&gt;Service Broker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moving directly to Azure SQL Database may require code changes. Azure SQL Managed Instance supports most SQL Server features. It lets companies move to Azure with minimal application changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  SQL Server on Azure VM
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Think of Azure VM as renting a computer.

Microsoft gives you:

✔ Virtual Machine

You install:

✔ Windows

✔ SQL Server

✔ Configure Everything

Maximum Control

Maximum Responsibility

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SQL Database in Microsoft Fabric
&lt;/h2&gt;

&lt;p&gt;This is where most tutorials fail.&lt;/p&gt;

&lt;p&gt;I'd explain it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Traditional Company

Application
↓
SQL Database
↓
ETL
↓
Data Warehouse
↓
Power BI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many separate systems.&lt;/p&gt;

&lt;p&gt;Fabric&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Application
↓
SQL Database
↓
Automatic Mirroring
↓
OneLake
↓
Analytics
↓
Power BI

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No manual ETL. Everything stays synchronized automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  OneLake
&lt;/h2&gt;

&lt;p&gt;Think of OneLake as Google Drive for enterprise data. Every Fabric service shares the same storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delta Parquet
&lt;/h2&gt;

&lt;p&gt;This is NOT another database. It is a highly optimized file format used for analytics. Fabric automatically creates these files from your SQL tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;Analytics queries can be extremely heavy. Instead of querying the live production database, Fabric queries the Delta Parquet copy. Your application remains fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Best Choice When&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SQL Server&lt;/td&gt;
&lt;td&gt;Full control on your own servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Server on Azure VM&lt;/td&gt;
&lt;td&gt;Need OS/SQL customization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Azure SQL Database&lt;/td&gt;
&lt;td&gt;Building modern cloud applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Azure SQL Managed Instance&lt;/td&gt;
&lt;td&gt;Migrating existing SQL Server apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Database in Fabric&lt;/td&gt;
&lt;td&gt;Need OLTP + analytics + AI together&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Reference : &lt;a href="https://learn.microsoft.com/en-us/training/modules/design-implement-database-objects/2-understanding-platform-choices?pivots=text" rel="noopener noreferrer"&gt;understanding-platform-choices&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>microsoft</category>
      <category>sql800</category>
      <category>dp800</category>
    </item>
    <item>
      <title>Build your skills in Microsoft Fabric, SQL, Power BI, or AI</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:03:17 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/build-your-skills-in-microsoft-fabric-sql-power-bi-or-ai-88j</link>
      <guid>https://dev.to/sajjadrahman56/build-your-skills-in-microsoft-fabric-sql-power-bi-or-ai-88j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Microsoft Fabric Data Days 2026&lt;/strong&gt; is a great opportunity to access free learning modules, live sessions, study groups, and certification preparation. Eligible participants can also work toward a &lt;strong&gt;free Microsoft certification exam voucher&lt;/strong&gt; by completing the event requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv40jvrorye8l9vsjk432.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv40jvrorye8l9vsjk432.png" alt=" " width="766" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're interested in data, analytics, AI, or cloud technologies, don't miss this opportunity. Start learning today!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Data-Days-Join-a-Study-Group/ba-p/5188509" rel="noopener noreferrer"&gt;Join &lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  DataDays #MicrosoftFabric #SQL #AI #MicrosoftLearn #DP600 #DP700 #DP800 #Learning
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>data</category>
      <category>microsoft</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Gaussian Processes &amp; Reproducibility</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Mon, 20 Apr 2026 06:53:38 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/gaussian-processes-reproducibility-l7k</link>
      <guid>https://dev.to/sajjadrahman56/gaussian-processes-reproducibility-l7k</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Q1. Multivariate Normal Distribution&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A multivariate Gaussian is fully defined by:&lt;/p&gt;

&lt;p&gt;A. Mean only&lt;br&gt;
B. Covariance only&lt;br&gt;
C. Mean and covariance&lt;br&gt;
D. Variance only&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q2. Covariance Matrix Property&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The covariance matrix Σ must be:&lt;/p&gt;

&lt;p&gt;A. Negative&lt;br&gt;
B. Diagonal only&lt;br&gt;
C. Symmetric&lt;br&gt;
D. Random&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q3. Gaussian Process Definition&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A Gaussian Process is:&lt;/p&gt;

&lt;p&gt;A. Parametric model&lt;br&gt;
B. Deterministic function&lt;br&gt;
C. Distribution over functions&lt;br&gt;
D. Classification model&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q4. GP Output&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gaussian Processes provide:&lt;/p&gt;

&lt;p&gt;A. Only prediction&lt;br&gt;
B. Only variance&lt;br&gt;
C. Prediction + uncertainty&lt;br&gt;
D. Only labels&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q5. Kernel Function Role&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The kernel defines:&lt;/p&gt;

&lt;p&gt;A. Mean&lt;br&gt;
B. Covariance structure&lt;br&gt;
C. Labels&lt;br&gt;
D. Loss function&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q6. Squared Exponential Kernel&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If x₁ = x₂, covariance is:&lt;/p&gt;

&lt;p&gt;A. 0&lt;br&gt;
B. 1&lt;br&gt;
C. ∞&lt;br&gt;
D. −1&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q7. Distance Effect on Covariance&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If |x₁ − x₂| increases:&lt;/p&gt;

&lt;p&gt;A. Covariance increases&lt;br&gt;
B. Covariance decreases&lt;br&gt;
C. No change&lt;br&gt;
D. Becomes negative&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q8. GP Length Scale (λ)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Large λ leads to:&lt;/p&gt;

&lt;p&gt;A. Wiggly function&lt;br&gt;
B. Smooth function&lt;br&gt;
C. Random output&lt;br&gt;
D. No prediction&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q9. Signal Variance (σ²f)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Increasing signal variance causes:&lt;/p&gt;

&lt;p&gt;A. Smaller outputs&lt;br&gt;
B. Larger variation&lt;br&gt;
C. No effect&lt;br&gt;
D. More noise&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q10. Noise Variance (σ²n)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Noise variance controls:&lt;/p&gt;

&lt;p&gt;A. Smoothness&lt;br&gt;
B. Data noise level&lt;br&gt;
C. Distance&lt;br&gt;
D. Kernel type&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q11. GP Model Characterisation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A GP is fully defined by:&lt;/p&gt;

&lt;p&gt;A. Kernel only&lt;br&gt;
B. Mean only&lt;br&gt;
C. Mean + covariance&lt;br&gt;
D. Hyperparameters only&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q12. One-vs-All Classification&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For k classes, number of classifiers:&lt;/p&gt;

&lt;p&gt;A. 1&lt;br&gt;
B. k&lt;br&gt;
C. k²&lt;br&gt;
D. k(k−1)/2&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q13. One-vs-One Classification&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Number of classifiers:&lt;/p&gt;

&lt;p&gt;A. k&lt;br&gt;
B. k−1&lt;br&gt;
C. k(k−1)/2&lt;br&gt;
D. 2k&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q14. One-Hot Encoding&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A categorical variable with c values becomes:&lt;/p&gt;

&lt;p&gt;A. 1 variable&lt;br&gt;
B. c variables&lt;br&gt;
C. c² variables&lt;br&gt;
D. log(c) variables&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q15. Imbalanced Data Issue&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Models tend to:&lt;/p&gt;

&lt;p&gt;A. Underpredict majority class&lt;br&gt;
B. Overpredict majority class&lt;br&gt;
C. Ignore data&lt;br&gt;
D. Always balance&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q16. Undersampling&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Undersampling means:&lt;/p&gt;

&lt;p&gt;A. Adding data&lt;br&gt;
B. Removing majority samples&lt;br&gt;
C. Increasing noise&lt;br&gt;
D. Feature selection&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q17. Reproducibility Definition&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Reproducibility means:&lt;/p&gt;

&lt;p&gt;A. Same author repeats results&lt;br&gt;
B. Others reproduce results with own implementation&lt;br&gt;
C. Same dataset only&lt;br&gt;
D. Same code only&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q18. Repeatability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Repeatability means:&lt;/p&gt;

&lt;p&gt;A. Others reproduce results&lt;br&gt;
B. Same author repeats experiment&lt;br&gt;
C. Different datasets&lt;br&gt;
D. Random runs&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q19. Random Seed&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using same seed ensures:&lt;/p&gt;

&lt;p&gt;A. Different results&lt;br&gt;
B. Same results&lt;br&gt;
C. Faster training&lt;br&gt;
D. Better accuracy&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q20. McNemar’s Test&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Used for:&lt;/p&gt;

&lt;p&gt;A. Clustering&lt;br&gt;
B. Regression&lt;br&gt;
C. Comparing classifiers&lt;br&gt;
D. Feature selection&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C &lt;/p&gt;




</description>
      <category>ai</category>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Lagrange Multipliers</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Mon, 20 Apr 2026 06:49:54 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/lagrange-multipliers-11d8</link>
      <guid>https://dev.to/sajjadrahman56/lagrange-multipliers-11d8</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Q1. Lagrange Multipliers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What condition holds at the optimum?&lt;/p&gt;

&lt;p&gt;A. ∇f(x) = 0&lt;br&gt;
B. ∇f(x) = Σ λᵢ∇gᵢ(x)&lt;br&gt;
C. g(x) = 1&lt;br&gt;
D. λᵢ = 0&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;br&gt;
👉 Gradients align at optimum &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q2. KKT Conditions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Which is TRUE?&lt;/p&gt;

&lt;p&gt;A. αᵢ &amp;lt; 0&lt;br&gt;
B. αᵢgᵢ(x*) = 1&lt;br&gt;
C. αᵢ ≥ 0&lt;br&gt;
D. Constraints are ignored&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q3. Hyperplane Definition&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A hyperplane satisfies:&lt;/p&gt;

&lt;p&gt;A. w·x + b = 0&lt;br&gt;
B. x² + y² = 1&lt;br&gt;
C. ∇x = 0&lt;br&gt;
D. y = mx²&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; A &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q4. Role of w in SVM&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The vector &lt;strong&gt;w&lt;/strong&gt; determines:&lt;/p&gt;

&lt;p&gt;A. Bias&lt;br&gt;
B. Orientation of hyperplane&lt;br&gt;
C. Number of classes&lt;br&gt;
D. Dataset size&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q5. Role of b&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The bias term controls:&lt;/p&gt;

&lt;p&gt;A. Orientation&lt;br&gt;
B. Distance metric&lt;br&gt;
C. Position of hyperplane&lt;br&gt;
D. Kernel&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q6. Support Vectors&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Support vectors are:&lt;/p&gt;

&lt;p&gt;A. All training points&lt;br&gt;
B. Points far from boundary&lt;br&gt;
C. Points on margin&lt;br&gt;
D. Random points&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q7. Margin Maximisation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;SVM maximises:&lt;/p&gt;

&lt;p&gt;A. ||w||&lt;br&gt;
B. 1 / ||w||&lt;br&gt;
C. Number of features&lt;br&gt;
D. Training error&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q8. Constraint for Correct Classification&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Which is correct?&lt;/p&gt;

&lt;p&gt;A. yᵢ(w·xᵢ + b) ≥ 1&lt;br&gt;
B. w·x = 0&lt;br&gt;
C. yᵢ = 0&lt;br&gt;
D. xᵢ ≥ 1&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; A&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q9. Dual Problem Uses&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The dual formulation depends on:&lt;/p&gt;

&lt;p&gt;A. Distances&lt;br&gt;
B. Inner products&lt;br&gt;
C. Gradients&lt;br&gt;
D. Labels only&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q10. Kernel Trick&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What does a kernel do?&lt;/p&gt;

&lt;p&gt;A. Reduces data size&lt;br&gt;
B. Computes inner product in feature space&lt;br&gt;
C. Removes noise&lt;br&gt;
D. Normalises data&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q11. Kernel Function&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;k(x, y) represents:&lt;/p&gt;

&lt;p&gt;A. Distance&lt;br&gt;
B. Similarity&lt;br&gt;
C. Label&lt;br&gt;
D. Error&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q12. Soft Margin Parameter C&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Large C leads to:&lt;/p&gt;

&lt;p&gt;A. Wider margin&lt;br&gt;
B. More misclassification&lt;br&gt;
C. Narrow margin, fewer errors&lt;br&gt;
D. No effect&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q13. Small C Leads To&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A small C results in:&lt;/p&gt;

&lt;p&gt;A. Narrow margin&lt;br&gt;
B. Wide margin&lt;br&gt;
C. Overfitting&lt;br&gt;
D. No classification&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q14. Slack Variable ξᵢ&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If ξᵢ &amp;gt; 1:&lt;/p&gt;

&lt;p&gt;A. Correct classification&lt;br&gt;
B. Margin violation only&lt;br&gt;
C. Misclassification&lt;br&gt;
D. No effect&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q15. Inner Product&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The dot product is:&lt;/p&gt;

&lt;p&gt;A. Σ xᵢ²&lt;br&gt;
B. Σ wᵢxᵢ&lt;br&gt;
C. x + w&lt;br&gt;
D. ||x||&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q16. PCA Property&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Principal components are:&lt;/p&gt;

&lt;p&gt;A. Parallel&lt;br&gt;
B. Random&lt;br&gt;
C. Orthogonal&lt;br&gt;
D. Identical&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q17. Generalisation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Good generalisation means:&lt;/p&gt;

&lt;p&gt;A. Perfect training accuracy&lt;br&gt;
B. Good performance on unseen data&lt;br&gt;
C. Large dataset only&lt;br&gt;
D. High variance&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q18. KNN Curse of Dimensionality&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As dimensions increase:&lt;/p&gt;

&lt;p&gt;A. Performance improves&lt;br&gt;
B. Distance becomes more meaningful&lt;br&gt;
C. Performance worsens&lt;br&gt;
D. No change&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q19. K-Means Property&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Each iteration:&lt;/p&gt;

&lt;p&gt;A. Increases error&lt;br&gt;
B. Decreases or keeps SSE same&lt;br&gt;
C. Randomly changes clusters&lt;br&gt;
D. Stops immediately&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q20. Neural Gas&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Closest codevector (rank 0):&lt;/p&gt;

&lt;p&gt;A. Moves least&lt;br&gt;
B. Moves most&lt;br&gt;
C. Does not move&lt;br&gt;
D. Is removed&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B &lt;/p&gt;




</description>
      <category>ai</category>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>✅ MCQs</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Mon, 20 Apr 2026 06:47:46 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/mcqs-1llo</link>
      <guid>https://dev.to/sajjadrahman56/mcqs-1llo</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Q1. Linear Models&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Which statement about linear models is correct?&lt;/p&gt;

&lt;p&gt;A. They always produce nonlinear decision boundaries&lt;br&gt;
B. They use a hyperplane as a decision surface&lt;br&gt;
C. They maximise classification accuracy directly&lt;br&gt;
D. They ignore input features&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;br&gt;
👉 From PDF: “The decision surface is a hyperplane.” &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q2. Sum of Squared Errors (SSE)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What is the goal when training a linear model?&lt;/p&gt;

&lt;p&gt;A. Maximise likelihood&lt;br&gt;
B. Minimise SSE&lt;br&gt;
C. Maximise distance between points&lt;br&gt;
D. Minimise number of features&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;br&gt;
👉 Linear models minimise SSE &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q3. Effect of Outliers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What is true about samples far from the hyperplane?&lt;/p&gt;

&lt;p&gt;A. They have no effect&lt;br&gt;
B. They are ignored&lt;br&gt;
C. They have a stronger effect on the model&lt;br&gt;
D. They reduce variance&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;br&gt;
👉 “Samples far away from hyperplane have a stronger effect.” &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q4. Linear Separability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When are data points typically linearly separable?&lt;/p&gt;

&lt;p&gt;A. When ( n \gg d )&lt;br&gt;
B. When ( n \le d + 1 )&lt;br&gt;
C. Always&lt;br&gt;
D. Never&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;br&gt;
👉 From PDF: separable when ( n \le d + 1 ) &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q5. KNN Prediction&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What does KNN use to classify a new data point?&lt;/p&gt;

&lt;p&gt;A. Mean of all points&lt;br&gt;
B. Nearest neighbours&lt;br&gt;
C. Gradient descent&lt;br&gt;
D. Covariance matrix&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;br&gt;
👉 Based on nearest neighbours &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q6. Role of K in KNN&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What is the effect of choosing a small K?&lt;/p&gt;

&lt;p&gt;A. Smooth decision boundary&lt;br&gt;
B. Linear boundary&lt;br&gt;
C. Highly flexible / irregular boundary&lt;br&gt;
D. No effect&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;br&gt;
👉 Small K → complex, irregular decision surfaces &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q7. Distance Metrics&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Which is NOT mentioned as a valid distance in KNN?&lt;/p&gt;

&lt;p&gt;A. Euclidean distance&lt;br&gt;
B. Manhattan distance&lt;br&gt;
C. Hamming distance&lt;br&gt;
D. Fourier distance&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; D&lt;br&gt;
👉 Others are listed in PDF &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q8. Curse of Dimensionality&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What happens as dimensionality increases?&lt;/p&gt;

&lt;p&gt;A. Less data is needed&lt;br&gt;
B. Nearest neighbours become more meaningful&lt;br&gt;
C. Required training data increases exponentially&lt;br&gt;
D. Models become simpler&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; C&lt;br&gt;
👉 “Required amount of training examples increases exponentially” &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q9. Cross-Validation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What is the purpose of cross-validation?&lt;/p&gt;

&lt;p&gt;A. Increase training error&lt;br&gt;
B. Evaluate model performance on unseen data&lt;br&gt;
C. Remove noise&lt;br&gt;
D. Reduce dimensionality&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;br&gt;
👉 Used for validation/testing &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Q10. Accuracy Definition&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Accuracy is defined as:&lt;/p&gt;

&lt;p&gt;A. TP / FP&lt;br&gt;
B. (TP + TN) / Total&lt;br&gt;
C. FN / Total&lt;br&gt;
D. TP / (TP + FN)&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Answer:&lt;/strong&gt; B&lt;br&gt;
👉 Standard accuracy formula &lt;/p&gt;

</description>
      <category>ai</category>
      <category>datascience</category>
      <category>learning</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>📘 Master Note: The Hidden Mechanics of PCA &amp; ICA</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Sat, 04 Apr 2026 09:17:13 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/master-note-the-hidden-mechanics-of-pca-ica-34f5</link>
      <guid>https://dev.to/sajjadrahman56/master-note-the-hidden-mechanics-of-pca-ica-34f5</guid>
      <description>&lt;p&gt;Understanding Whitening, SVD, and the Math that Powers Dimensionality Reduction.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Part 1: The Big Picture (Intuition)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before diving into complex algorithms like ICA, we need to understand the "behind-the-scenes" heroes that prepare and decompose our data.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Whitening: The Essential Pre-step for ICA&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Whitening prepares your data so that all variables are uncorrelated and have equal variance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Goal:&lt;/strong&gt; Transform the data into a "decorrelated, equal-variance" form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💡 The Intuition:&lt;/strong&gt; Imagine your data looks like a stretched, tilted "egg" (oval cloud).

&lt;ul&gt;
&lt;li&gt;After PCA: The egg is rotated straight.&lt;/li&gt;
&lt;li&gt;After Whitening: The egg becomes a perfect sphere.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Why bother?&lt;/strong&gt; ICA looks for independent signals. If data is already "spherical," ICA doesn't get distracted by the width or tilt of the data; it focuses entirely on finding non-Gaussian independence.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. SVD: The Practical Engine of PCA&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;SVD is a mathematical powerhouse that decomposes any matrix $X$ into three parts:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;X&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;U&lt;/span&gt;&lt;span class="mord"&gt;Σ&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;V&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;$U$&lt;/strong&gt;: Directions in data space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$\Sigma$&lt;/strong&gt;: The strengths (importance) of each direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$V$&lt;/strong&gt;: The directions of the features (The Principal Components).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 2: The Mathematical Engine&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;How do we actually move from raw data to a "white" sphere or a PCA result?&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. The Whitening Transformation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If $X$ is your original centered data, we use the Eigenvalues ($D$) and Eigenvectors ($E$) to transform it:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;X&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;w&lt;/span&gt;&lt;span class="mord mathnormal mtight"&gt;hi&lt;/span&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal mtight"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;E&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;1/2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;E&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;X&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;The logic behind the math:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;$E^T$&lt;/strong&gt;: Rotates the data (PCA).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$D^{-1/2}$&lt;/strong&gt;: The "Magic Step." It scales every axis by its inverse standard deviation. It shrinks long axes and stretches short ones until they are equal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. The SVD ↔ PCA Connection&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You can reach Principal Components via two paths, but they lead to the same destination:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Path A (Classical PCA):&lt;/strong&gt; Find Eigenvectors of the Covariance Matrix:

&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;V&lt;/span&gt;&lt;span class="mord"&gt;Λ&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;V&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path B (Modern SVD):&lt;/strong&gt; Decompose $X$ directly:

&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;X&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;U&lt;/span&gt;&lt;span class="mord"&gt;Σ&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;V&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The "Aha!" Moment:&lt;/strong&gt;&lt;br&gt;
The $V$ in SVD is identical to the $V$ (Eigenvectors) in PCA. The Singular Values ($\sigma$) are the square roots of the Eigenvalues ($\lambda$):&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;λ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;σ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  &lt;strong&gt;Part 3: Performance &amp;amp; Comparisons&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why use SVD instead of Classical PCA?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In real-world data science, SVD is the industry standard for computing PCA.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Covariance (Classical)&lt;/th&gt;
&lt;th&gt;SVD (Modern)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires $XX^T$ (can be massive)&lt;/td&gt;
&lt;td&gt;Works directly on $X$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Precision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Squaring numbers loses small details&lt;/td&gt;
&lt;td&gt;Keeps high numerical precision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prone to rounding errors&lt;/td&gt;
&lt;td&gt;Highly stable and robust&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🧠 Final Logic Map (Summary)&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; Use &lt;strong&gt;SVD&lt;/strong&gt; to find the "skeleton" (Principal Components) of your data efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2:&lt;/strong&gt; Apply &lt;strong&gt;Whitening&lt;/strong&gt; to turn your data cloud into a perfect sphere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3:&lt;/strong&gt; Run &lt;strong&gt;ICA&lt;/strong&gt; on that sphere to find hidden, independent signals.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;🔥 Quick Memory:&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Whitening:&lt;/strong&gt; "Make it a sphere before ICA."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SVD:&lt;/strong&gt; "The efficient engine that makes PCA work in the real world."&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>data</category>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>ai</category>
    </item>
    <item>
      <title>📘 The Science of Un-Mixing Data (PCA &amp; ICA)</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Sat, 04 Apr 2026 09:09:50 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/the-science-of-un-mixing-data-pca-ica-3775</link>
      <guid>https://dev.to/sajjadrahman56/the-science-of-un-mixing-data-pca-ica-3775</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Part 1: The Math Toolbox (Prerequisites)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before we can understand PCA and ICA, we need to understand the tools they use. Think of these as the "rules of the game" for handling data.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Basic Concepts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Matrix (The Table):&lt;/strong&gt; Data is organized into a &lt;strong&gt;matrix&lt;/strong&gt;, which is just a giant grid of numbers. The &lt;strong&gt;columns&lt;/strong&gt; usually represent different types of measurements (like different microphones or cameras), and the &lt;strong&gt;rows&lt;/strong&gt; represent each specific moment in time we recorded.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Vector (The Arrow):&lt;/strong&gt; A single row or column from that table is called a &lt;strong&gt;vector&lt;/strong&gt;. Mathematically, a vector is like an arrow pointing to a specific spot in a multi-dimensional space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inner Product (The Shadow):&lt;/strong&gt; This is a way to multiply two vectors together. It tells us how much one vector "overlaps" with another. We use this to &lt;strong&gt;project&lt;/strong&gt; our data onto new axes to see it from a better angle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Basis Vectors (The Directions):&lt;/strong&gt; These are the "original" directions we use to measure things, like the X and Y axes on a graph.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔹 Statistical Concepts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Covariance (Redundancy):&lt;/strong&gt; This measures how much two measurements "change together". If Measurement A always goes up when Measurement B goes up, they are &lt;strong&gt;redundant&lt;/strong&gt; (highly correlated), meaning we don't really need both.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Covariance Equation (Added, not replacing anything):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;cov&lt;/span&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;B&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;





&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gaussian Distribution (The Bell Curve):&lt;/strong&gt; This is a smooth, bell-shaped curve that represents "randomness" or "noise". The &lt;strong&gt;Central Limit Theorem&lt;/strong&gt; says that if you mix many different signals together, the result will always look like a Gaussian bell curve.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kurtosis (The Peakedness):&lt;/strong&gt; This is a math score that measures how "sharp" or "peaked" a distribution of numbers is. A high kurtosis means the data has a sharp point, while a Gaussian curve has a kurtosis of zero.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 2: PCA (Principal Component Analysis)&lt;/strong&gt;
&lt;/h2&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Goal&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Goal:&lt;/strong&gt; To simplify a giant pile of data by finding the "best angle" to look at it.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;How it Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; PCA looks at the &lt;strong&gt;Covariance Matrix&lt;/strong&gt; of the data to find where the measurements are repeating each other.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Eigenvectors and Eigenvalues:&lt;/strong&gt; PCA calculates special directions called &lt;strong&gt;eigenvectors&lt;/strong&gt;. The "largest" eigenvector points in the direction where the most "action" (variance) is happening.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Core Equation (Added)&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⋅&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;E&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;(D): data matrix&lt;/li&gt;
&lt;li&gt;(E): eigenvectors of covariance&lt;/li&gt;
&lt;li&gt;(P): principal components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Covariance becomes &lt;strong&gt;diagonal&lt;/strong&gt; after PCA&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Properties&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dimensionality Reduction:&lt;/strong&gt; By ignoring the tiny eigenvectors (which usually represent noise) and keeping only the big ones, we can make a huge data set much smaller without losing the important stuff.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Rule of Orthogonality:&lt;/strong&gt; In PCA, the new axes we find must always be &lt;strong&gt;orthogonal&lt;/strong&gt;—which is a fancy way of saying they must be at &lt;strong&gt;90-degree right angles&lt;/strong&gt; to each other.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Algorithm Steps (Added Section)&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PCA Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Center data (mean = 0)&lt;/li&gt;
&lt;li&gt;Compute covariance matrix&lt;/li&gt;
&lt;li&gt;Find eigenvectors&lt;/li&gt;
&lt;li&gt;Project data&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why PCA Can Fail (Added Section)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;👉 PCA fails when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data is &lt;strong&gt;non-linear&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Or variance ≠ true structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ferris wheel → PCA cannot find circular motion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Add this line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;PCA only captures &lt;strong&gt;linear structure&lt;/strong&gt;, ICA can handle more complex separation.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 3: ICA (Independent Component Analysis)&lt;/strong&gt;
&lt;/h2&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Goal&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Goal:&lt;/strong&gt; To solve the &lt;strong&gt;"Cocktail Party Problem"&lt;/strong&gt;—taking a messy mixture of signals and separating them into their original, clear sources.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;How it Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blind Source Separation:&lt;/strong&gt; ICA is used when we have mixtures (like two microphones recording two people) but we don't know exactly how they were mixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Weight Matrix ($W$):&lt;/strong&gt; ICA tries to find a mathematical "unmixing" tool called a &lt;strong&gt;weight matrix&lt;/strong&gt;. When we multiply our messy data by this matrix, the original signals should pop out.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Core Equation (Added)&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Y&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;X&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⋅&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;(X): mixed signals&lt;/li&gt;
&lt;li&gt;(W): unmixing matrix&lt;/li&gt;
&lt;li&gt;(Y): independent sources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 This is &lt;strong&gt;THE most important ICA equation&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Concepts&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Search for Independence:&lt;/strong&gt; ICA is stricter than PCA. It doesn't just want the data to be "not repeating"; it wants the signals to be &lt;strong&gt;statistically independent&lt;/strong&gt;, meaning what happens in one signal tells you absolutely nothing about the other.&lt;/li&gt;
&lt;/ul&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Non-Gaussianity (The Secret Trick):&lt;/strong&gt; Because mixed-up signals look like smooth bell curves, ICA rotates the data until it finds the directions with &lt;strong&gt;maximum kurtosis&lt;/strong&gt; (the most peaked shapes). A sharp peak usually means you've found a pure, unmixed source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Improved understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mixtures → Gaussian (Central Limit Theorem)&lt;/li&gt;
&lt;li&gt;Sources → non-Gaussian (peaked)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Key idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ICA works because &lt;strong&gt;mixing makes data Gaussian, so unmixing looks for non-Gaussian signals&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; Unlike PCA, the axes in ICA do &lt;strong&gt;not&lt;/strong&gt; have to be at right angles. They can point in any direction needed to find the sources.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Algorithm Steps (Added Section)&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ICA Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Center + whiten data&lt;/li&gt;
&lt;li&gt;Initialize weights&lt;/li&gt;
&lt;li&gt;Maximize non-Gaussianity&lt;/li&gt;
&lt;li&gt;Iterate until convergence&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 4: PCA vs ICA (Added Comparison Table)&lt;/strong&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;PCA&lt;/th&gt;
&lt;th&gt;ICA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Goal&lt;/td&gt;
&lt;td&gt;Max variance&lt;/td&gt;
&lt;td&gt;Independence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Uncorrelated&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Axes&lt;/td&gt;
&lt;td&gt;Orthogonal&lt;/td&gt;
&lt;td&gt;Not required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uses&lt;/td&gt;
&lt;td&gt;Compression&lt;/td&gt;
&lt;td&gt;Signal separation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assumption&lt;/td&gt;
&lt;td&gt;Gaussian OK&lt;/td&gt;
&lt;td&gt;Non-Gaussian needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 Lecture explicitly says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PCA → decorrelation&lt;/li&gt;
&lt;li&gt;ICA → independence (stronger)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 5: Why do we use these?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;These tools are used in many cool ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fetal Heart Monitoring:&lt;/strong&gt; Separating a baby's tiny heartbeat from the mother's much louder heartbeat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EEG (Brain Waves):&lt;/strong&gt; Removing "trash" signals like eye blinks or heartbeats from recordings of brain activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fMRI (Brain Imaging):&lt;/strong&gt; Finding which specific parts of the brain are working together during a task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Computer Vision:&lt;/strong&gt; Understanding how our eyes and brain recognize edges and shapes in the world around us.&lt;/li&gt;
&lt;/ol&gt;




</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>datascience</category>
      <category>data</category>
    </item>
    <item>
      <title>Stanford is Teaching the World to Code for Free!</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Wed, 25 Mar 2026 12:57:35 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/stanford-is-teaching-the-world-to-code-for-free-3hf5</link>
      <guid>https://dev.to/sajjadrahman56/stanford-is-teaching-the-world-to-code-for-free-3hf5</guid>
      <description>&lt;h2&gt;
  
  
  Learn Python from Stanford ** 🚀
&lt;/h2&gt;

&lt;p&gt;This isn't just a video course; it is a structured journey where you learn to build logic step-by-step with &lt;strong&gt;Chris and Mehran&lt;/strong&gt;. If you want to stop watching tutorials and start actually coding, here is why you should join &lt;strong&gt;&lt;a href="https://codeinplace.stanford.edu/public/join/cip6?r=ngqms6" rel="noopener noreferrer"&gt;Stanford’s Code in Place&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  What Makes This Course Unique?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Karel Phase:&lt;/strong&gt; You don't start with scary syntax. Instead, you command "Karel," a tiny robot, to master logic, loops, and problem-solving foundations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Mastery:&lt;/strong&gt; The curriculum moves smoothly from basic Print and Input to advanced topics like control flow and graphics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creative Freedom:&lt;/strong&gt; You get to build your own projects, like a "Console" or the "Game of Nimm," giving you the confidence to create from scratch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data &amp;amp; Beyond:&lt;/strong&gt; You will master real-world techniques involving Lists, Dictionaries, and Graphics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Best Part? The Community!
&lt;/h3&gt;

&lt;p&gt;You aren't learning alone. You are supported by a massive core team and amazing section leaders who help you at every step of the way. &lt;/p&gt;

&lt;h3&gt;
  
  
  Join the Movement!
&lt;/h3&gt;

&lt;p&gt;If you’re ready to take your first real step into programming, apply today. Use the link below to start your application:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Apply Now:&lt;/strong&gt; &lt;a href="https://codeinplace.stanford.edu/public/join/cip6?r=ngqms6" rel="noopener noreferrer"&gt;https://codeinplace.stanford.edu/public/join/cip6?r=ngqms6&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s learn and build together!&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>stanford</category>
      <category>python</category>
      <category>micropython</category>
    </item>
    <item>
      <title>Understanding cmd /c and cmd /k</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Wed, 07 Jan 2026 17:33:48 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/understanding-cmd-c-and-cmd-k-255</link>
      <guid>https://dev.to/sajjadrahman56/understanding-cmd-c-and-cmd-k-255</guid>
      <description>&lt;p&gt;When I started learning Command Prompt, I was very confused about &lt;code&gt;cmd /c&lt;/code&gt; and &lt;code&gt;cmd /k&lt;/code&gt;. Even after running the commands, everything looked the same, so I thought &lt;em&gt;nothing was executed&lt;/em&gt;. If you feel the same, this post is for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  First, understand this important point
&lt;/h3&gt;

&lt;p&gt;You are &lt;strong&gt;already inside a Command Prompt&lt;/strong&gt; when you see something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I:\ethical-test&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is your &lt;strong&gt;parent CMD&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What actually happens when you run &lt;code&gt;cmd /k dir&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd /k dir
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What it does step by step:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your current CMD starts a &lt;strong&gt;new CMD (child CMD)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The new CMD executes the &lt;code&gt;dir&lt;/code&gt; command&lt;/li&gt;
&lt;li&gt;Because of &lt;code&gt;/k&lt;/code&gt;, the new CMD &lt;strong&gt;stays open&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Since the path and prompt look the same, it &lt;strong&gt;appears unchanged&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;In reality, you are now inside the &lt;strong&gt;child CMD&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can prove this by typing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will take you back to the parent CMD.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens when you run &lt;code&gt;cmd /c echo hello&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd /c echo hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A new CMD opens&lt;/li&gt;
&lt;li&gt;It runs &lt;code&gt;echo hello&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Prints &lt;code&gt;hello&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Immediately closes the new CMD&lt;/li&gt;
&lt;li&gt;Control returns to the parent CMD&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s why you only see the output and nothing else.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this feels confusing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You are running &lt;strong&gt;CMD inside CMD&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Windows does not show any visual difference&lt;/li&gt;
&lt;li&gt;Same path, same prompt, same window&lt;/li&gt;
&lt;li&gt;Execution happens very fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it &lt;em&gt;looks&lt;/em&gt; like nothing changed, but it actually did.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple rule to remember
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cmd&lt;/code&gt; → creates a new Command Prompt&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/k&lt;/code&gt; → run command and &lt;strong&gt;keep CMD open&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/c&lt;/code&gt; → run command and &lt;strong&gt;close CMD immediately&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final takeaway
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;cmd /c&lt;/code&gt; and &lt;code&gt;cmd /k&lt;/code&gt; &lt;strong&gt;do work correctly&lt;/strong&gt;.&lt;br&gt;
The confusion happens because beginners usually run them &lt;strong&gt;inside an already opened CMD&lt;/strong&gt;, so the difference is not visually obvious.&lt;/p&gt;

&lt;p&gt;If you understand this, most CMD-related confusion disappears.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cli</category>
      <category>microsoft</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Windows CMD – File &amp; Directory Management</title>
      <dc:creator>Sajjad Rahman</dc:creator>
      <pubDate>Wed, 07 Jan 2026 16:42:37 +0000</pubDate>
      <link>https://dev.to/sajjadrahman56/windows-cmd-file-directory-management-2nof</link>
      <guid>https://dev.to/sajjadrahman56/windows-cmd-file-directory-management-2nof</guid>
      <description>&lt;p&gt;Windows CMD – File &amp;amp; Directory Management&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Directory Basics (&lt;code&gt;dir&lt;/code&gt;)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Show files and folders
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important entries&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.&lt;/code&gt; → current directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;..&lt;/code&gt; → parent directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;DIR&amp;gt;&lt;/code&gt; → folder&lt;/li&gt;
&lt;li&gt;File size shown in bytes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2️⃣ Creating Files with &lt;code&gt;echo&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a file with text
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"sajjad"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;samina&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Read file content
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="kd"&gt;samina&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"sajjad"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠ Why quotes appear?
&lt;/h3&gt;

&lt;p&gt;Because quotes are &lt;strong&gt;literal characters&lt;/strong&gt; inside &lt;code&gt;echo&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;✔ To avoid quotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="kd"&gt;sajjad&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;samina&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3️⃣ Creating an Empty (Blank) File – IMPORTANT CONCEPT
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command used
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;err&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ❓ Why is &lt;code&gt;2&lt;/code&gt; used here?
&lt;/h3&gt;

&lt;p&gt;This is &lt;strong&gt;error stream redirection&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stream&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Standard Input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Standard Output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Standard Error&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What actually happens?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;echo&lt;/code&gt; produces &lt;strong&gt;no error&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Error stream (&lt;code&gt;2&lt;/code&gt;) is empty&lt;/li&gt;
&lt;li&gt;Empty stream redirected → file created with &lt;strong&gt;0 bytes&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✔ This is a &lt;strong&gt;CMD trick&lt;/strong&gt; to create an empty file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better &amp;amp; common methods
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;nul&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;file&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;. &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;file&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysp2dhlvf29sgly6d5z7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysp2dhlvf29sgly6d5z7.png" alt="CMD" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4️⃣ Deleting Files (&lt;code&gt;del&lt;/code&gt;)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="kd"&gt;na&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check after deletion
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="kd"&gt;na&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The system cannot find the file specified.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ File deleted successfully&lt;/p&gt;




&lt;h2&gt;
  
  
  5️⃣ Renaming Files (&lt;code&gt;rename&lt;/code&gt;)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;rename&lt;/span&gt; &lt;span class="kd"&gt;err&lt;/span&gt;.txt &lt;span class="kd"&gt;error&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ File name changes only, content remains same&lt;/p&gt;




&lt;h2&gt;
  
  
  6️⃣ Creating &amp;amp; Moving Directories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;samsaj&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Move file into directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;move&lt;/span&gt; &lt;span class="kd"&gt;samina&lt;/span&gt;.txt &lt;span class="kd"&gt;samsaj&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Change directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="kd"&gt;samsaj&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Go back
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7️⃣ Path Symbols Explained
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;..&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Parent directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Windows path separator&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;move&lt;/span&gt; &lt;span class="kd"&gt;samina&lt;/span&gt;.txt .\samsaj
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8️⃣ Copying Files (&lt;code&gt;copy&lt;/code&gt;)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;samina&lt;/span&gt;.txt &lt;span class="kd"&gt;sajjad&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Creates duplicate file with same content&lt;/p&gt;




&lt;h2&gt;
  
  
  9️⃣ Removing Directories (&lt;code&gt;rmdir&lt;/code&gt;) – VERY IMPORTANT
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Delete empty directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;rmdir&lt;/span&gt; &lt;span class="kd"&gt;sam&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ❌ If directory is NOT empty
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;The&lt;/span&gt; &lt;span class="kd"&gt;directory&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kd"&gt;empty&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✔ Correct way to delete directory with files
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;rmdir&lt;/span&gt; &lt;span class="na"&gt;/S &lt;/span&gt;&lt;span class="kd"&gt;sam&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/S&lt;/code&gt; → deletes &lt;strong&gt;all files + subdirectories&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Confirmation required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Wrong commands (do not work):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;rmdir&lt;/span&gt; &lt;span class="na"&gt;-S &lt;/span&gt;&lt;span class="kd"&gt;sam&lt;/span&gt;
&lt;span class="nb"&gt;rmdir&lt;/span&gt; \S &lt;span class="kd"&gt;sam&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔟 Comparing Files (&lt;code&gt;fc&lt;/code&gt;)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;fc&lt;/span&gt; &lt;span class="kd"&gt;sajjad&lt;/span&gt;.txt &lt;span class="kd"&gt;samina&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output meaning
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shows &lt;strong&gt;line-by-line differences&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Useful for file integrity checking&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1️⃣1️⃣ Symbolic Links (Soft Links) – &lt;code&gt;mklink&lt;/code&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠ CMD must be &lt;strong&gt;Run as Administrator&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Create symbolic link
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mklink&lt;/span&gt; &lt;span class="kd"&gt;linkfile&lt;/span&gt; &lt;span class="kd"&gt;file3&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Verify
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;SYMLINK&amp;gt; linkfile [file3.txt]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Both files point to same data&lt;br&gt;
✔ Reading/writing link affects original file&lt;/p&gt;


&lt;h2&gt;
  
  
  1️⃣2️⃣ Searching Files with &lt;code&gt;dir&lt;/code&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Search specific file recursively
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/s &lt;/span&gt;&lt;span class="kd"&gt;torjan&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Search all &lt;code&gt;.txt&lt;/code&gt; files
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/s &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  1️⃣3️⃣ Finding Files using &lt;code&gt;forfiles&lt;/code&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Command
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;forfiles&lt;/span&gt; &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="kd"&gt;I&lt;/span&gt;:\ &lt;span class="na"&gt;/S /M &lt;/span&gt;&lt;span class="kd"&gt;torjan&lt;/span&gt;.txt &lt;span class="na"&gt;/C &lt;/span&gt;&lt;span class="s2"&gt;"cmd /c echo @PATH"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Flags explained
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/P&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Starting directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recursive search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/M&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Filename or pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Command to run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@PATH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full file path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  ❗ Access denied errors?
&lt;/h3&gt;

&lt;p&gt;Normal behavior — system protected folders (&lt;code&gt;$RECYCLE.BIN&lt;/code&gt;, &lt;code&gt;System Volume Information&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;✔ File still found successfully.&lt;/p&gt;


&lt;h2&gt;
  
  
  1️⃣4️⃣ Finding Text Inside Files – &lt;code&gt;find&lt;/code&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ❌ Wrong usage
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;find&lt;/span&gt; &lt;span class="s2"&gt;"pass"&lt;/span&gt; &lt;span class="kd"&gt;I&lt;/span&gt;:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✔ Correct usage
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;find&lt;/span&gt; &lt;span class="s2"&gt;"pass"&lt;/span&gt; &lt;span class="kd"&gt;filename&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;find&lt;/span&gt; &lt;span class="s2"&gt;"pass"&lt;/span&gt; &lt;span class="kd"&gt;I&lt;/span&gt;:\ethical&lt;span class="na"&gt;-test&lt;/span&gt;\samsaj\s299\s299.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pass : s299
pass : s265
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠ &lt;code&gt;find&lt;/code&gt; is &lt;strong&gt;case-sensitive&lt;/strong&gt; and basic&lt;/p&gt;




&lt;h2&gt;
  
  
  1️⃣5️⃣ Advanced Text Search – &lt;code&gt;findstr&lt;/code&gt; (Recommended)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Search word
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;findstr&lt;/span&gt; &lt;span class="s2"&gt;"pass"&lt;/span&gt; &lt;span class="kd"&gt;s299&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pass : s299
pass : s265
sam pass samina password
sajjad password pass
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why &lt;code&gt;findstr&lt;/code&gt; is better?
&lt;/h3&gt;

&lt;p&gt;✔ Case-insensitive (by default)&lt;br&gt;
✔ Supports patterns&lt;br&gt;
✔ Searches multiple lines cleanly&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Key Takeaways (Revision Summary)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;echo &amp;gt; file&lt;/code&gt; → creates file with content&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;echo 2&amp;gt; file&lt;/code&gt; → creates &lt;strong&gt;empty file via error redirection&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt; → read file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;del&lt;/code&gt; → delete file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rename&lt;/code&gt; → rename file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mkdir&lt;/code&gt; / &lt;code&gt;rmdir&lt;/code&gt; → directory management&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/S&lt;/code&gt; is &lt;strong&gt;mandatory&lt;/strong&gt; to delete non-empty folders&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fc&lt;/code&gt; → compare files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mklink&lt;/code&gt; → symbolic link (admin required)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dir /s&lt;/code&gt; → recursive file search&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;forfiles&lt;/code&gt; → powerful file finder + executor&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;findstr&lt;/code&gt; → best for searching text inside files&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>microsoft</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
