Loading...

Features Engineering

While preparing our data, we need to think constantly about the most suitable features we can use to achieve our overall goals.

Features engineering makes use of many techniques - too many to go over in this short lesson. We’ll focus on the most popular ones.

Customized Features Engineering

To build a customized feature, you can use the eval() method of the VastFrame. Let’s look at an example with the well-known titanic dataset.

import vastorbit as vo
from vastorbit.datasets import load_titanic

titanic = load_titanic()
titanic.head(100)
123
pclass
Integer
100%
123
survived
Integer
100%
Abc
name
Varchar(164)
100%
Abc
sex
Varchar(20)
100%
123
age
Double
79%
123
sibsp
Integer
100%
123
parch
Integer
100%
Abc
ticket
Varchar(36)
100%
123
fare
Double
99%
Abc
cabin
Varchar(30)
22%
Abc
embarked
Varchar(20)
99%
Abc
boat
Varchar(100)
37%
123
body
Integer
9%
Abc
home.dest
Varchar(100)
56%
131McCormack, Mr. Thomas Josephmale[null]003672287.75[null]Q[null][null][null]
231McCoy, Miss. Agnesfemale[null]2036722623.25[null]Q16[null][null]
331McCoy, Miss. Aliciafemale[null]2036722623.25[null]Q16[null][null]
431McCoy, Mr. Bernardmale[null]2036722623.25[null]Q16[null][null]
531McDermott, Miss. Brigdet Deliafemale[null]003309327.7875[null]Q13[null][null]
630McEvoy, Mr. Michaelmale[null]003656815.5[null]Q[null][null][null]
731McGovern, Miss. Maryfemale[null]003309317.8792[null]Q13[null][null]
831McGowan, Miss. Anna "Annie"female15.0003309238.0292[null]Q[null][null][null]
930McGowan, Miss. Katherinefemale35.00092327.75[null]Q[null][null][null]
1030McMahon, Mr. Martinmale[null]003703727.75[null]Q[null][null][null]
1130McNamee, Mr. Nealmale24.01037656616.1[null]S[null][null][null]
1230McNamee, Mrs. Neal (Eileen O'Leary)female19.01037656616.1[null]S[null]53[null]
1330McNeill, Miss. Bridgetfemale[null]003703687.75[null]Q[null][null][null]
1430Meanwell, Miss. (Marion Ogden)female[null]00SOTON/O.Q. 3920878.05[null]S[null][null][null]
1530Meek, Mrs. Thomas (Annie Louise Rowley)female[null]003430958.05[null]S[null][null][null]
1630Meo, Mr. Alfonzomale55.500A.5. 112068.05[null]S[null]201[null]
1730Mernagh, Mr. Robertmale[null]003687037.75[null]Q[null][null][null]
1831Midtsjo, Mr. Karl Albertmale21.0003455017.775[null]S15[null][null]
1930Miles, Mr. Frankmale[null]003593068.05[null]S[null][null][null]
2030Mineff, Mr. Ivanmale24.0003492337.8958[null]S[null][null][null]
2130Minkoff, Mr. Lazarmale21.0003492117.8958[null]S[null][null][null]
2230Mionoff, Mr. Stoytchomale28.0003492077.8958[null]S[null][null][null]
2330Mitkoff, Mr. Mitomale[null]003492217.8958[null]S[null][null][null]
2431Mockler, Miss. Helen Mary "Ellie"female[null]003309807.8792[null]Q16[null][null]
2530Moen, Mr. Sigurd Hansenmale25.0003481237.65F G73S[null]309[null]
2631Moor, Master. Meiermale6.00139209612.475E121S14[null][null]
2731Moor, Mrs. (Beila)female27.00139209612.475E121S14[null][null]
2830Moore, Mr. Leonard Charlesmale[null]00A4. 545108.05[null]S[null][null][null]
2931Moran, Miss. Berthafemale[null]1037111024.15[null]Q16[null][null]
3030Moran, Mr. Daniel Jmale[null]1037111024.15[null]Q[null][null][null]
3130Moran, Mr. Jamesmale[null]003308778.4583[null]Q[null][null][null]
3230Morley, Mr. Williammale34.0003645068.05[null]S[null][null][null]
3330Morrow, Mr. Thomas Rowanmale[null]003726227.75[null]Q[null][null][null]
3431Moss, Mr. Albert Johanmale[null]003129917.775[null]SB[null][null]
3531Moubarek, Master. Geriosmale[null]11266115.2458[null]CC[null][null]
3631Moubarek, Master. Halim Gonios ("William George")male[null]11266115.2458[null]CC[null][null]
3731Moubarek, Mrs. George (Omine "Amenia" Alexander)female[null]02266115.2458[null]CC[null][null]
3831Moussa, Mrs. (Mantoura Boulos)female[null]0026267.2292[null]C[null][null][null]
3930Moutal, Mr. Rahamin Haimmale[null]003747468.05[null]S[null][null][null]
4031Mullens, Miss. Katherine "Katie"female[null]00358527.7333[null]Q16[null][null]
4131Mulvihill, Miss. Bertha Efemale24.0003826537.75[null]Q15[null][null]
4230Murdlin, Mr. Josephmale[null]00A./5. 32358.05[null]S[null][null][null]
4331Murphy, Miss. Katherine "Kate"female[null]1036723015.5[null]Q16[null][null]
4431Murphy, Miss. Margaret Janefemale[null]1036723015.5[null]Q16[null][null]
4531Murphy, Miss. Norafemale[null]003656815.5[null]Q16[null][null]
4630Myhrman, Mr. Pehr Fabian Oliver Malkolmmale18.0003470787.75[null]S[null][null][null]
4730Naidenoff, Mr. Penkomale22.0003492067.8958[null]S[null][null][null]
4831Najib, Miss. Adele Kiamie "Jane"female15.00026677.225[null]CC[null][null]
4931Nakid, Miss. Maria ("Mary")female1.002265315.7417[null]CC[null][null]
5031Nakid, Mr. Sahidmale20.011265315.7417[null]CC[null][null]
5131Nakid, Mrs. Said (Waika "Mary" Mowad)female19.011265315.7417[null]CC[null][null]
5230Nancarrow, Mr. William Henrymale33.000A./5. 33388.05[null]S[null][null][null]
5330Nankoff, Mr. Minkomale[null]003492187.8958[null]S[null][null][null]
5430Nasr, Mr. Mustafamale[null]0026527.2292[null]C[null][null][null]
5530Naughton, Miss. Hannahfemale[null]003652377.75[null]Q[null][null][null]
5630Nenkoff, Mr. Christomale[null]003492347.8958[null]S[null][null][null]
5731Nicola-Yarred, Master. Eliasmale12.010265111.2417[null]CC[null][null]
5831Nicola-Yarred, Miss. Jamilafemale14.010265111.2417[null]CC[null][null]
5930Nieminen, Miss. Manta Josefinafemale29.00031012977.925[null]S[null][null][null]
6030Niklasson, Mr. Samuelmale28.0003636118.05[null]S[null][null][null]
6131Nilsson, Miss. Berta Oliviafemale18.0003470667.775[null]SD[null][null]
6231Nilsson, Miss. Helmina Josefinafemale26.0003474707.8542[null]S13[null][null]
6330Nilsson, Mr. August Ferdinandmale21.0003504107.8542[null]S[null][null][null]
6430Nirva, Mr. Iisakki Antino Aijomale41.000SOTON/O2 31012727.125[null]S[null][null]Finland Sudbury, ON
6531Niskanen, Mr. Juhamale39.000STON/O 2. 31012897.925[null]S9[null][null]
6630Nosworthy, Mr. Richard Catermale21.000A/4. 398867.8[null]S[null][null][null]
6730Novel, Mr. Mansouermale28.50026977.2292[null]C[null]181[null]
6831Nysten, Miss. Anna Sofiafemale22.0003470817.75[null]S13[null][null]
6930Nysveen, Mr. Johan Hansenmale61.0003453646.2375[null]S[null][null][null]
7030O'Brien, Mr. Thomasmale[null]1037036515.5[null]Q[null][null][null]
7130O'Brien, Mr. Timothymale[null]003309797.8292[null]Q[null][null][null]
7231O'Brien, Mrs. Thomas (Johanna "Hannah" Godfrey)female[null]1037036515.5[null]Q[null][null][null]
7330O'Connell, Mr. Patrick Dmale[null]003349127.7333[null]Q[null][null][null]
7430O'Connor, Mr. Mauricemale[null]003710607.75[null]Q[null][null][null]
7530O'Connor, Mr. Patrickmale[null]003667137.75[null]Q[null][null][null]
7630Odahl, Mr. Nils Martinmale23.00072679.225[null]S[null][null][null]
7730O'Donoghue, Ms. Bridgetfemale[null]003648567.75[null]Q[null][null][null]
7831O'Driscoll, Miss. Bridgetfemale[null]00143117.75[null]QD[null][null]
7931O'Dwyer, Miss. Ellen "Nellie"female[null]003309597.8792[null]Q[null][null][null]
8031Ohman, Miss. Velinfemale22.0003470857.775[null]SC[null][null]
8131O'Keefe, Mr. Patrickmale[null]003684027.75[null]QB[null][null]
8231O'Leary, Miss. Hanora "Norah"female[null]003309197.8292[null]Q13[null][null]
8331Olsen, Master. Artur Karlmale9.001C 173683.1708[null]S13[null][null]
8430Olsen, Mr. Henry Margidomale28.000C 400122.525[null]S[null]173[null]
8530Olsen, Mr. Karl Siegwart Andreasmale42.00145798.4042[null]S[null][null][null]
8630Olsen, Mr. Ole Martinmale[null]00Fa 2653027.3125[null]S[null][null][null]
8730Olsson, Miss. Elinafemale31.0003504077.8542[null]S[null][null][null]
8830Olsson, Mr. Nils Johan Goranssonmale28.0003474647.8542[null]S[null][null][null]
8931Olsson, Mr. Oscar Wilhelmmale32.0003470797.775[null]SA[null][null]
9030Olsvigen, Mr. Thor Andersonmale20.00065639.225[null]S[null]89Oslo, Norway Cameron, WI
9130Oreskovic, Miss. Jelkafemale23.0003150858.6625[null]S[null][null][null]
9230Oreskovic, Miss. Marijafemale20.0003150968.6625[null]S[null][null][null]
9330Oreskovic, Mr. Lukamale20.0003150948.6625[null]S[null][null][null]
9430Osen, Mr. Olaf Elonmale16.00075349.2167[null]S[null][null][null]
9531Osman, Mrs. Marafemale31.0003492448.6833[null]S[null][null][null]
9630O'Sullivan, Miss. Bridget Maryfemale[null]003309097.6292[null]Q[null][null][null]
9730Palsson, Master. Gosta Leonardmale2.03134990921.075[null]S[null]4[null]
9830Palsson, Master. Paul Folkemale6.03134990921.075[null]S[null][null][null]
9930Palsson, Miss. Stina Violafemale3.03134990921.075[null]S[null][null][null]
10030Palsson, Miss. Torborg Danirafemale8.03134990921.075[null]S[null][null][null]

The feature parch corresponds to the number of parents and children on-board. The feature sibsp corresponds to the number of siblings and spouses on-board. We can create the feature family_size which is equal to parch + sibsp + 1.

titanic["family_size"] = titanic["parch"] + titanic["sibsp"] + 1
titanic.select(["parch", "sibsp", "family_size"])
123
parch
Integer
100%
123
sibsp
Integer
100%
123
family_size
Integer
100%
1001
2023
3023
4023
5001
6001
7001
8001
9001
10001
11012
12012
13001
14001
15001
16001
17001
18001
19001
20001

When using the eval() method, you can enter any SQL expression and vastorbit will evaluate it!

Regular Expressions

To compute features using regular expressions, we’ll use the regexp() method.

help(vo.VastFrame.regexp)

Consider the following example: notice that passenger names include their title.

titanic["name"]
Abc
name
Varchar(164)
1McCormack, Mr. Thomas Joseph
2McCoy, Miss. Agnes
3McCoy, Miss. Alicia
4McCoy, Mr. Bernard
5McDermott, Miss. Brigdet Delia
6McEvoy, Mr. Michael
7McGovern, Miss. Mary
8McGowan, Miss. Anna "Annie"
9McGowan, Miss. Katherine
10McMahon, Mr. Martin
11McNamee, Mr. Neal
12McNamee, Mrs. Neal (Eileen O'Leary)
13McNeill, Miss. Bridget
14Meanwell, Miss. (Marion Ogden)
15Meek, Mrs. Thomas (Annie Louise Rowley)
16Meo, Mr. Alfonzo
17Mernagh, Mr. Robert
18Midtsjo, Mr. Karl Albert
19Miles, Mr. Frank
20Mineff, Mr. Ivan

Let’s extract the title using regular expressions.

titanic.regexp(
    column = "name",
    name = "title",
    pattern = " ([A-Za-z])+\\.",
    method = "substr",
)
titanic.select(["name", "title"])
Abc
name
Varchar(164)
100%
Abc
title
Varchar(164)
100%
1McCormack, Mr. Thomas Joseph Mr.
2McCoy, Miss. Agnes Miss.
3McCoy, Miss. Alicia Miss.
4McCoy, Mr. Bernard Mr.
5McDermott, Miss. Brigdet Delia Miss.
6McEvoy, Mr. Michael Mr.
7McGovern, Miss. Mary Miss.
8McGowan, Miss. Anna "Annie" Miss.
9McGowan, Miss. Katherine Miss.
10McMahon, Mr. Martin Mr.
11McNamee, Mr. Neal Mr.
12McNamee, Mrs. Neal (Eileen O'Leary) Mrs.
13McNeill, Miss. Bridget Miss.
14Meanwell, Miss. (Marion Ogden) Miss.
15Meek, Mrs. Thomas (Annie Louise Rowley) Mrs.
16Meo, Mr. Alfonzo Mr.
17Mernagh, Mr. Robert Mr.
18Midtsjo, Mr. Karl Albert Mr.
19Miles, Mr. Frank Mr.
20Mineff, Mr. Ivan Mr.

Advanced Analytical Functions

The analytic() method contains the many advanced analytical functions in vastorbit.

help(vo.VastFrame.analytic)

To demonstrate some of these techniques, let’s use the amazon dataset and perform some computations.

from vastorbit.datasets import load_amazon

amazon = load_amazon()
amazon.head(100)
📅
date
Date
100%
Abc
state
Varchar(32)
100%
123
number
Integer
100%
12007-01-01ESPÍRITO SANTO0
22007-02-01ESPÍRITO SANTO3
32007-03-01ESPÍRITO SANTO9
42007-04-01ESPÍRITO SANTO2
52007-05-01ESPÍRITO SANTO1
62007-06-01ESPÍRITO SANTO4
72007-07-01ESPÍRITO SANTO13
82007-08-01ESPÍRITO SANTO82
92007-09-01ESPÍRITO SANTO63
102007-10-01ESPÍRITO SANTO79
112007-11-01ESPÍRITO SANTO112
122007-12-01ESPÍRITO SANTO14
132007-01-01GOIÁS28
142007-02-01GOIÁS13
152007-03-01GOIÁS49
162007-04-01GOIÁS17
172007-05-01GOIÁS94
182007-06-01GOIÁS186
192007-07-01GOIÁS399
202007-08-01GOIÁS2382
212007-09-01GOIÁS3745
222007-10-01GOIÁS1195
232007-11-01GOIÁS79
242007-12-01GOIÁS16
252007-01-01MARANHÃO428
262007-02-01MARANHÃO13
272007-03-01MARANHÃO52
282007-04-01MARANHÃO5
292007-05-01MARANHÃO73
302007-06-01MARANHÃO515
312007-07-01MARANHÃO1205
322007-08-01MARANHÃO8409
332007-09-01MARANHÃO8524
342007-10-01MARANHÃO4772
352007-11-01MARANHÃO2297
362007-12-01MARANHÃO800
372007-01-01MATO GROSSO19
382007-02-01MATO GROSSO111
392007-03-01MATO GROSSO137
402007-04-01MATO GROSSO46
412007-05-01MATO GROSSO62
422007-06-01MATO GROSSO141
432007-07-01MATO GROSSO197
442007-08-01MATO GROSSO1823
452007-09-01MATO GROSSO4446
462007-10-01MATO GROSSO668
472007-11-01MATO GROSSO82
482007-12-01MATO GROSSO15
492007-01-01MATO GROSSO DO SUL476
502007-02-01MATO GROSSO DO SUL213
512007-03-01MATO GROSSO DO SUL476
522007-04-01MATO GROSSO DO SUL79
532007-05-01MATO GROSSO DO SUL359
542007-06-01MATO GROSSO DO SUL1339
552007-07-01MATO GROSSO DO SUL1790
562007-08-01MATO GROSSO DO SUL14453
572007-09-01MATO GROSSO DO SUL25963
582007-10-01MATO GROSSO DO SUL4890
592007-11-01MATO GROSSO DO SUL299
602007-12-01MATO GROSSO DO SUL81
612007-01-01MINAS GERAIS91
622007-02-01MINAS GERAIS71
632007-03-01MINAS GERAIS155
642007-04-01MINAS GERAIS35
652007-05-01MINAS GERAIS124
662007-06-01MINAS GERAIS184
672007-07-01MINAS GERAIS446
682007-08-01MINAS GERAIS2975
692007-09-01MINAS GERAIS5088
702007-10-01MINAS GERAIS3467
712007-11-01MINAS GERAIS1305
722007-12-01MINAS GERAIS95
732007-01-01PARANÁ11
742007-02-01PARANÁ32
752007-03-01PARANÁ54
762007-04-01PARANÁ14
772007-05-01PARANÁ14
782007-06-01PARANÁ57
792007-07-01PARANÁ60
802007-08-01PARANÁ580
812007-09-01PARANÁ960
822007-10-01PARANÁ194
832007-11-01PARANÁ59
842007-12-01PARANÁ22
852007-01-01PARAÍBA69
862007-02-01PARAÍBA7
872007-03-01PARAÍBA1
882007-04-01PARAÍBA0
892007-05-01PARAÍBA0
902007-06-01PARAÍBA0
912007-07-01PARAÍBA1
922007-08-01PARAÍBA8
932007-09-01PARAÍBA22
942007-10-01PARAÍBA111
952007-11-01PARAÍBA256
962007-12-01PARAÍBA133
972007-01-01PARÁ467
982007-02-01PARÁ23
992007-03-01PARÁ6
1002007-04-01PARÁ0

For each state, let’s compute the previous number of forest fires.

amazon.analytic(
    name = "previous_number",
    func = "lag",
    columns = "number",
    by = "state",
    order_by = {"date": "asc"},
)
📅
date
Date
100%
Abc
state
Varchar(32)
100%
123
number
Integer
100%
123
previous_number
Integer
99%
11998-01-01TOCANTINS0[null]
21998-02-01TOCANTINS00
31998-03-01TOCANTINS00
41998-04-01TOCANTINS00
51998-05-01TOCANTINS00
61998-06-01TOCANTINS2520
71998-07-01TOCANTINS640252
81998-08-01TOCANTINS3747640
91998-09-01TOCANTINS51493747
101998-10-01TOCANTINS17385149
111998-11-01TOCANTINS11738
121998-12-01TOCANTINS91
131999-01-01TOCANTINS369
141999-02-01TOCANTINS136
151999-03-01TOCANTINS11
161999-04-01TOCANTINS91
171999-05-01TOCANTINS249
181999-06-01TOCANTINS11324
191999-07-01TOCANTINS373113
201999-08-01TOCANTINS1284373

Moving Windows

Moving windows are powerful features. Moving windows are managed by the rolling() method in vastorbit.

help(vo.VastFrame.rolling)

Let’s look at forest fires for each state three months preceding two months following the examined period.

amazon.rolling(
    name = "number_3mp_2mf",
    func = "sum",
    window = ("- 3 months", "2 months"),
    columns = "number",
    by = "state",
    order_by = {"date": "asc"},
)
📅
date
Date
100%
Abc
state
Varchar(32)
100%
123
number
Integer
100%
123
previous_number
Integer
99%
123
number_3mp_2mf
Bigint
100%
11998-01-01MINAS GERAIS0[null]0
21998-02-01MINAS GERAIS000
31998-03-01MINAS GERAIS000
41998-04-01MINAS GERAIS0070
51998-05-01MINAS GERAIS00302
61998-06-01MINAS GERAIS7001177
71998-07-01MINAS GERAIS232703158
81998-08-01MINAS GERAIS8752324251
91998-09-01MINAS GERAIS19818754283
101998-10-01MINAS GERAIS109319814234
111998-11-01MINAS GERAIS3210934038
121998-12-01MINAS GERAIS21323275
131999-01-01MINAS GERAIS36211307
141999-02-01MINAS GERAIS11236241
151999-03-01MINAS GERAIS13112260
161999-04-01MINAS GERAIS2713371
171999-05-01MINAS GERAIS5127653
181999-06-01MINAS GERAIS132511731
191999-07-01MINAS GERAIS3181324404
201999-08-01MINAS GERAIS11903185740

Moving windows give us infinite possibilities for creating new features.

After we’ve finished preparing our data, our next task is to create a machine learning model.