Loading...

Missing Values

Missing values occur when no data value is stored for the variable in an observation and are most often represented with a NULL or None. Not handling them can lead to unexpected results (for example, some ML algorithms can’t handle missing values at all) and worse, it can lead to incorrect conclusions.

There are 3 main types of missing values:

  • MCAR (Missing Completely at Random): The events that lead to any particular data-item being missing occur entirely at random. For example, in IOT, we can lose sensory data in transmission.

  • MAR (Missing {Conditionally} at Random): Missing data doesn’t happen at random and is instead related to some of the observed data. For example, some students may have not answered to some specific questions of a test because they were absent during the relevant lesson.

  • MNAR (Missing not at Random): The value of the variable that’s missing is related to the reason it’s missing. For example, if someone didn’t subscribe to a loyalty program, we can leave the cell empty.

Different types of missing values tend to suggest different methods for imputing them. For example, when dealing with MCAR values, you can use mathematical aggregations to impute the missing values. For MNAR values, we can simply create another category. MAR values, however, we’ll need to do some more investigation before deciding how to impute the data.

To see how to handle missing values in vastorbit, we’ll use the well-known titanic dataset.

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]

We can examine the missing values with the count() method.

titanic.count_percent()
countpercent
"pclass"1309.0100.0
"survived"1309.0100.0
"name"1309.0100.0
"sex"1309.0100.0
"sibsp"1309.0100.0
"parch"1309.0100.0
"ticket"1309.0100.0
"fare"1308.099.924
"embarked"1307.099.847
"age"1046.079.908
"home.dest"745.056.914
"boat"486.037.128
"cabin"295.022.536
"body"121.09.244

The missing values for boat are MNAR; missing values simply indicate that the passengers didn’t pay for a lifeboat. We can replace all the missing values with a new category No Lifeboat using the fillna() method.

titanic["boat"].fillna("No Lifeboat")
titanic["boat"]
Abc
boat
Varchar(100)
1No Lifeboat
216
316
416
513
6No Lifeboat
713
8No Lifeboat
9No Lifeboat
10No Lifeboat
11No Lifeboat
12No Lifeboat
13No Lifeboat
14No Lifeboat
15No Lifeboat
16No Lifeboat
17No Lifeboat
1815
19No Lifeboat
20No Lifeboat

Missing values for age seem to be MCAR, so the best way to impute them is with mathematical aggregations. Let’s impute the age using the average age of passengers of the same sex and class.

titanic["age"].fillna(
    method = "avg",
    by = ["pclass", "sex"],
)
titanic["age"]
123
age
Double
129.0
22.0
325.0
463.0
553.0
618.0
724.0
826.0
950.0
1032.0
1147.0
1242.0
1329.0
1419.0
1535.0
1630.0
1758.0
1845.0
1922.0
2044.0

The features embarked and fare have a couple missing values. Instead of using a technique to impute them, we can just drop them with the dropna() method.

titanic["fare"].dropna()
titanic["embarked"].dropna()
123
pclass
Integer
100%
123
survived
Integer
100%
Abc
name
Varchar(164)
100%
Abc
sex
Varchar(20)
100%
123
age
Double
100%
123
sibsp
Integer
100%
123
parch
Integer
100%
Abc
ticket
Varchar(36)
100%
123
fare
Double
100%
Abc
cabin
Varchar(30)
22%
Abc
embarked
Varchar(20)
100%
Abc
boat
Varchar(100)
100%
123
body
Integer
9%
Abc
home.dest
Varchar(100)
56%
121Abelson, Mrs. Samuel (Hannah Wizosky)female28.010P/PP 338124.0[null]C10[null]Russia New York, NY
221Angle, Mrs. William A (Florence "Mary" Agnes Hughes)female36.01022687526.0[null]S11[null]Warwick, England
321Ball, Mrs. (Ada E Hall)female36.0002855113.0DS10[null]Bristol, Avon / Jacksonville, FL
421Beane, Mrs. Edward (Ethel Clarke)female19.010290826.0[null]S13[null]Norwich / New York, NY
521Becker, Miss. Marion Louisefemale4.02123013639.0F4S11[null]Guntur, India / Benton Harbour, MI
621Becker, Miss. Ruth Elizabethfemale12.02123013639.0F4S13[null]Guntur, India / Benton Harbour, MI
721Becker, Mrs. Allen Oliver (Nellie E Baumgardner)female36.00323013639.0F4S11[null]Guntur, India / Benton Harbour, MI
821Bentham, Miss. Lilian Wfemale19.0002840413.0[null]S12[null]Rochester, NY
921Brown, Miss. Amelia "Mildred"female24.00024873313.0F33S11[null]London / Montreal, PQ
1021Brown, Miss. Edith Eileenfemale15.0022975039.0[null]S14[null]Cape Town, South Africa / Seattle, WA
1121Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford)female40.0112975039.0[null]S14[null]Cape Town, South Africa / Seattle, WA
1221Bryhl, Miss. Dagmar Jenny Ingeborg female20.01023685326.0[null]S12[null]Skara, Sweden / Rockford, IL
1321Buss, Miss. Katefemale36.0002784913.0[null]S9[null]Sittingbourne, England / San Diego, CA
1421Bystrom, Mrs. (Karolina)female42.00023685213.0[null]SNo Lifeboat[null]New York, NY
1521Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh)female22.01124873829.0[null]S13[null]Bangkok, Thailand / Roseville, IL
1621Cameron, Miss. Clear Anniefemale35.000F.C.C. 1352821.0[null]S14[null]Mamaroneck, NY
1720Carter, Mrs. Ernest Courtenay (Lilian Hughes)female44.01024425226.0[null]SNo Lifeboat[null]London
1820Chapman, Mrs. John Henry (Sara Elizabeth Lawry)female29.010SC/AH 2903726.0[null]SNo Lifeboat[null]Cornwall / Spokane, WA
1921Christy, Miss. Julie Rachelfemale25.01123778930.0[null]S12[null]London
2021Christy, Mrs. (Alice Frances)female45.00223778930.0[null]S12[null]London

The fillna() method offers many options. Let’s use the help() function to view its parameters.

help(titanic["embarked"].fillna)
print(titanic.current_relation())

Depending on the circumstances, we’ll need to investigate to find the most suitable solution.

In conclusion, before imputing missing data, you have to understand why it might be missing and how it relates to the rest of your dataset.