Agrupamento em faixas & Engenharia

Machine learning com PySpark

Andrew Collier

Data Scientist, Fathom Data

Agrupamento em faixas

Agrupando observações contínuas em faixas

Machine learning com PySpark

Agrupando alturas em faixas

Um histograma de alturas

+------+
|height|
+------+
|  1.42|
|  1.45|
|  1.47|
|  1.50|
|  1.52|
|  1.57|
|  1.60|
|  1.75|
|  1.85|
|  1.88|
+------+
Machine learning com PySpark

Agrupando alturas em faixas

Um histograma de alturas com intervalos

+------+
|height|
+------+
|  1.42|
|  1.45|
|  1.47|
|  1.50|
|  1.52|
|  1.57|
|  1.60|
|  1.75|
|  1.85|
|  1.88|
+------+
Machine learning com PySpark

Agrupando alturas em faixas

Um histograma de alturas com intervalos e rótulos

+------+
|height|
+------+
|  1.42|
|  1.45|
|  1.47|
|  1.50|
|  1.52|
|  1.57|
|  1.60|
|  1.75|
|  1.85|
|  1.88|
+------+
Machine learning com PySpark

Agrupando alturas em faixas

Um histograma de alturas com intervalos e rótulos

+------+----------+
|height|height_bin|
+------+----------+
|  1.42|     short|
|  1.45|     short|
|  1.47|     short|
|  1.50|     short|
|  1.52|   average|
|  1.57|   average|
|  1.60|   average|
|  1.75|   average|
|  1.85|      tall|
|  1.88|      tall|
+------+----------+
Machine learning com PySpark

Histograma de RPM

RPM de carros tem quebras "naturais":

  • $\text{RPM} < 4500$ — baixa
  • $\text{RPM} > 6000$ — alta
  • caso contrário — média.

Um histograma de RPM com intervalos e rótulos

Machine learning com PySpark

Faixas de RPM

from pyspark.ml.feature import Bucketizer

bucketizer = Bucketizer(splits=[3500, 4500, 6000, 6500],
                        inputCol="rpm",
                        outputCol="rpm_bin")

Aplicar faixas à coluna rpm.

bucketed = bucketizer.transform(cars)
Machine learning com PySpark

Faixas de RPM

bucketed.select('rpm', 'rpm_bin').show(5)
+----+-------+
| rpm|rpm_bin|
+----+-------+
|3800|    0.0|
|4500|    1.0|
|5750|    1.0|
|5300|    1.0|
|6200|    2.0|
+----+-------+
bucketed.groupBy('rpm_bin').count().show()
+-------+-----+
|rpm_bin|count|
+-------+-----+
|    0.0|    8| <- baixa
|    1.0|   67| <- média
|    2.0|   17| <- alta
+-------+-----+
Machine learning com PySpark

Faixas de RPM one-hot encoded

As faixas de RPM são one-hot encoded em variáveis dummy.

+-------+-------------+
|rpm_bin|    rpm_dummy|
+-------+-------------+
|    0.0|(2,[0],[1.0])| <- baixa
|    1.0|(2,[1],[1.0])| <- média
|    2.0|    (2,[],[])| <- alta
+-------+-------------+

A faixa de RPM "alta" é o nível de referência e não recebe variável dummy.

Machine learning com PySpark

Modelo com RPM em faixas

regression.coefficients
DenseVector([1.3814, 0.1433])
+-------+-------------+
|rpm_bin|    rpm_dummy|
+-------+-------------+
|    0.0|(2,[0],[1.0])| <- baixa
|    1.0|(2,[1],[1.0])| <- média
|    2.0|    (2,[],[])| <- alta
+-------+-------------+
regression.intercept
8.1835

Consumo para RPM "baixa":

8.1835 + 1.3814 = 9.5649

Consumo para RPM "média":

8.1835 + 0.1433 = 8.3268
Machine learning com PySpark

Mais feature engineering

Operações em uma coluna:

  • log()
  • sqrt()
  • pow()

Operações em duas colunas:

  • produto
  • razão.
Machine learning com PySpark

Massa & Altura para IMC

Um histograma de alturas

Um histograma de massas

Machine learning com PySpark

Massa & Altura para IMC

Um histograma de IMC

+------+-----+----+
|height| mass| bmi|    bmi = mass / height^2
+------+-----+----+
|  1.52| 77.1|33.2|
|  1.60| 58.1|22.7|
|  1.57|122.0|49.4|
|  1.75| 95.3|31.0|
|  1.80| 99.8|30.7|
|  1.65| 90.7|33.3|
|  1.60| 70.3|27.5|
|  1.78| 81.6|25.8|
|  1.65| 77.1|28.3|
|  1.78|128.0|40.5|
+------+-----+----+
Machine learning com PySpark

Engenharia de densidade

cars = cars.withColumn('density_line', cars.mass / cars.length)       # Linear density
cars = cars.withColumn('density_quad', cars.mass / cars.length**2)    # Area density
cars = cars.withColumn('density_cube', cars.mass / cars.length**3)    # Volume density
+------+------+------------+------------+------------+
|  mass|length|density_line|density_quad|density_cube|
+------+------+------------+------------+------------+
|1451.0| 4.775|303.87434554|63.638606397|13.327456837|
|1129.0| 4.623|244.21371403|52.825808790|11.426737787|
|1399.0| 4.547|307.67539036|67.665579583|14.881367843|
+------+------+------------+------------+------------+
Machine learning com PySpark

Vamos praticar!

Machine learning com PySpark

Preparing Video For Download...