fillmissing

Замените отсутствующие значения для предикторов карты показателей кредита

Описание

пример

sc = fillmissing(sc,PredictorNames,Statistics) заменяет отсутствующие значения предиктора PredictorNames со значениями, заданными Statistics и возвращает обновленный объект карты показателей кредита (sc). Стандартные отсутствующие данные определяются следующим образом:

  • NaN для числовых массивов

  • <undefined> для категориальных массивов

Примечание

Если бежать fillmissing после раскладывания предиктора существующие точки отсчета и границ интервала сохраняются и «Хорошие» и «Плохие» отсчеты от <missing> интервал добавляются к соответствующему интервалу.

пример

sc = fillmissing(___,ConstantValue) использует аргументы из предыдущего синтаксиса и значение для ConstantValue для замены отсутствующих значений.

Примеры

свернуть все

В этом примере показано, как использовать fillmissing для замены отсутствующих значений в CustAge и ResStatus предикторы с пользовательскими значениями. Для получения дополнительной информации об альтернативных подходах к «обработке» недостающих данных смотрите Моделирование карты показателей кредита с отсутствующими значениями.

Загрузите данные карты показателей кредита и используйте dataMissing для обучающих данных.

load CreditCardData.mat
disp(head(dataMissing));
    CustID    CustAge    TmAtAddress     ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    ___________    _________    __________    _______    _______    _________    ________    ______

      1          53          62         <undefined>    Unknown        50000         55         Yes       1055.9        0.22        0   
      2          61          22         Home Owner     Employed       52000         25         Yes       1161.6        0.24        0   
      3          47          30         Tenant         Employed       37000         61         No        877.23        0.29        0   
      4         NaN          75         Home Owner     Employed       53000         20         Yes       157.37        0.08        0   
      5          68          56         Home Owner     Employed       53000         14         Yes       561.84        0.11        0   
      6          65          13         Home Owner     Employed       48000         59         Yes       968.18        0.15        0   
      7          34          32         Home Owner     Unknown        32000         26         Yes       717.82        0.02        1   
      8          50          57         Other          Employed       51000         33         No        3041.2        0.13        0   

Создайте creditscorecard объект с 'BinMissingData' установлено на true.

sc = creditscorecard(dataMissing,'BinMissingData',true);
sc = autobinning(sc);

Использование bininfo и plotbins для отображения CustAge и ResStatus предикторы с отсутствующими данными.

bininfo(sc,'CustAge')
ans=10×6 table
         Bin         Good    Bad     Odds       WOE       InfoValue 
    _____________    ____    ___    ______    ________    __________

    {'[-Inf,33)'}     69      52    1.3269    -0.42156      0.018993
    {'[33,37)'  }     63      45       1.4    -0.36795      0.012839
    {'[37,40)'  }     72      47    1.5319     -0.2779     0.0079824
    {'[40,46)'  }    172      89    1.9326    -0.04556     0.0004549
    {'[46,48)'  }     59      25      2.36     0.15424     0.0016199
    {'[48,51)'  }     99      41    2.4146     0.17713     0.0035449
    {'[51,58)'  }    157      62    2.5323     0.22469     0.0088407
    {'[58,Inf]' }     93      25      3.72     0.60931      0.032198
    {'<missing>'}     19      11    1.7273    -0.15787    0.00063885
    {'Totals'   }    803     397    2.0227         NaN      0.087112

plotbins(sc,'CustAge');

Figure contains an axes. The axes with title CustAge contains 3 objects of type bar, line. These objects represent Good, Bad.

bininfo(sc,'ResStatus')
ans=5×6 table
         Bin          Good    Bad     Odds        WOE       InfoValue 
    ______________    ____    ___    ______    _________    __________

    {'Tenant'    }    296     161    1.8385    -0.095463     0.0035249
    {'Home Owner'}    352     171    2.0585     0.017549    0.00013382
    {'Other'     }    128      52    2.4615      0.19637     0.0055808
    {'<missing>' }     27      13    2.0769     0.026469    2.3248e-05
    {'Totals'    }    803     397    2.0227          NaN     0.0092627

plotbins(sc,'ResStatus');

Figure contains an axes. The axes with title ResStatus contains 3 objects of type bar, line. These objects represent Good, Bad.

Использование fillmissing для замены NaN значения в CustAge с медианным значением и для замены <missing> значения в ResStatus с 'Tenant'. Использование predictorinfo для проверки заполненных значений.

sc = fillmissing(sc,{'CustAge'},'median');
sc = fillmissing(sc,{'ResStatus'},'constant','Tenant');
predictorinfo(sc,'CustAge')
ans=1×4 table
               PredictorType         LatestBinning          LatestFillMissingType    LatestFillMissingValue
               _____________    ________________________    _____________________    ______________________

    CustAge     {'Numeric'}     {'Automatic / Monotone'}         {'Median'}                  {[45]}        

predictorinfo(sc,'ResStatus')
ans=1×5 table
                  PredictorType     Ordinal         LatestBinning          LatestFillMissingType    LatestFillMissingValue
                 _______________    _______    ________________________    _____________________    ______________________

    ResStatus    {'Categorical'}     false     {'Automatic / Monotone'}        {'Constant'}               {'Tenant'}      

Использование bininfo и plotbins для отображения CustAge и ResStatus предикторы, чтобы убедиться, что отсутствующие данные были заменены значениями, заданными fillmissing.

bininfo(sc,'CustAge')
ans=9×6 table
         Bin         Good    Bad     Odds        WOE       InfoValue
    _____________    ____    ___    ______    _________    _________

    {'[-Inf,33)'}     69      52    1.3269     -0.42156     0.018993
    {'[33,37)'  }     63      45       1.4     -0.36795     0.012839
    {'[37,40)'  }     72      47    1.5319      -0.2779    0.0079824
    {'[40,46)'  }    191     100      1.91    -0.057315    0.0008042
    {'[46,48)'  }     59      25      2.36      0.15424    0.0016199
    {'[48,51)'  }     99      41    2.4146      0.17713    0.0035449
    {'[51,58)'  }    157      62    2.5323      0.22469    0.0088407
    {'[58,Inf]' }     93      25      3.72      0.60931     0.032198
    {'Totals'   }    803     397    2.0227          NaN     0.086822

plotbins(sc,'CustAge');

Figure contains an axes. The axes with title CustAge contains 3 objects of type bar, line. These objects represent Good, Bad.

bininfo(sc,'ResStatus')
ans=4×6 table
         Bin          Good    Bad     Odds        WOE       InfoValue 
    ______________    ____    ___    ______    _________    __________

    {'Tenant'    }    323     174    1.8563    -0.085821     0.0030935
    {'Home Owner'}    352     171    2.0585     0.017549    0.00013382
    {'Other'     }    128      52    2.4615      0.19637     0.0055808
    {'Totals'    }    803     397    2.0227          NaN     0.0088081

plotbins(sc,'ResStatus');

Figure contains an axes. The axes with title ResStatus contains 3 objects of type bar, line. These objects represent Good, Bad.

Использование fitmodel а затем запустите formatpoints, displaypoints, и score.

sc = fitmodel(sc,'Display','off');
sc = formatpoints(sc,'WorstAndBest',[300 800]);
t = displaypoints(sc)
t=31×3 table
      Predictors             Bin           Points
    ______________    _________________    ______

    {'CustAge'   }    {'[-Inf,33)'    }    72.565
    {'CustAge'   }    {'[33,37)'      }    76.588
    {'CustAge'   }    {'[37,40)'      }    83.346
    {'CustAge'   }    {'[40,46)'      }    99.902
    {'CustAge'   }    {'[46,48)'      }    115.78
    {'CustAge'   }    {'[48,51)'      }     117.5
    {'CustAge'   }    {'[51,58)'      }    121.07
    {'CustAge'   }    {'[58,Inf]'     }    149.93
    {'CustAge'   }    {'<missing>'    }    99.902
    {'EmpStatus' }    {'Unknown'      }     79.64
    {'EmpStatus' }    {'Employed'     }    133.98
    {'EmpStatus' }    {'<missing>'    }       NaN
    {'CustIncome'}    {'[-Inf,29000)' }    21.926
    {'CustIncome'}    {'[29000,33000)'}    73.949
    {'CustIncome'}    {'[33000,35000)'}    97.117
    {'CustIncome'}    {'[35000,40000)'}    101.44
      ⋮

Когда набор данных валидации имеет отсутствующие значения, и вы используете fillmissing с помощью обучающего набора данных отсутствующим значениям в наборе данных валидации присваиваются те же точки, что и соответствующим интервалам, содержащим заполненные значения.

Как показывает таблица, '<missing>' интервал для CustAge предиктору присваиваются те же точки, что и '[40,46)' интервал, поскольку отсутствующие данные заполнены медианным значением 45.

Точки, присвоенные '<missing>' интервал для EmpStatus предиктор NaN потому что fillmissing не используется для этого предиктора. Присвоенные точки определяются значением по умолчанию 'NoScore' для 'Missing' аргумент пары "имя-значение" в formatpoints.

Создайте набор данных валидации теста (tdata) и добавить отсутствующие значения.

tdata = data(1:10,:);
tdata.CustAge(1) = NaN;
tdata.ResStatus(2) = '<undefined>';
[scr,pts] = score(sc,tdata)
scr = 10×1

  566.7335
  611.2547
  584.5130
  628.7876
  609.7148
  671.1048
  403.6413
  551.9461
  575.9874
  524.4789

pts=10×5 table
    CustAge    EmpStatus    CustIncome    TmWBank    AMBalance
    _______    _________    __________    _______    _________

    99.902       79.64        153.88      145.38      87.933  
    149.93      133.98        153.88      85.531      87.933  
    115.78      133.98        101.44      145.38      87.933  
     117.5      133.98        153.88      83.991      139.44  
    149.93      133.98        153.88      83.991      87.933  
    149.93      133.98        153.88      145.38      87.933  
    76.588       79.64        73.949      85.531      87.933  
     117.5      133.98        153.88      85.531       61.06  
     117.5       79.64        153.88      85.531      139.44  
     117.5       79.64        153.88      85.531      87.933  

В этом примере показаны различные возможности обработки недостающих данных в данных валидации.

При оценке данных из набора данных валидации у вас есть несколько опций. Если вы решите ничего не делать, точки, присвоенные отсутствующим данным NaN, который происходит от 'NoScore' по умолчанию для 'Missing' аргумент пары "имя-значение" в formatpoints.

Если вы хотите оценить отсутствующие значения всех предикторов с помощью одной последовательной метрики, можно использовать опции 'ZeroWOE', 'MinPoints', или 'MaxPoints' для 'Missing' аргумент пары "имя-значение" в formatpoints.

load CreditCardData.mat
sc = creditscorecard(data);
predictorinfo(sc,'CustAge')
ans=1×4 table
               PredictorType      LatestBinning      LatestFillMissingType    LatestFillMissingValue
               _____________    _________________    _____________________    ______________________

    CustAge     {'Numeric'}     {'Original Data'}        {'Original'}              {0x0 double}     

predictorinfo(sc,'ResStatus')
ans=1×5 table
                  PredictorType     Ordinal      LatestBinning      LatestFillMissingType    LatestFillMissingValue
                 _______________    _______    _________________    _____________________    ______________________

    ResStatus    {'Categorical'}     false     {'Original Data'}        {'Original'}              {0x0 double}     

sc = autobinning(sc);
sc = fitmodel(sc,'display','off');

displaypoints(sc)
ans=37×3 table
      Predictors            Bin            Points  
    ______________    ________________    _________

    {'CustAge'   }    {'[-Inf,33)'   }     -0.15894
    {'CustAge'   }    {'[33,37)'     }     -0.14036
    {'CustAge'   }    {'[37,40)'     }    -0.060323
    {'CustAge'   }    {'[40,46)'     }     0.046408
    {'CustAge'   }    {'[46,48)'     }      0.21445
    {'CustAge'   }    {'[48,58)'     }      0.23039
    {'CustAge'   }    {'[58,Inf]'    }        0.479
    {'CustAge'   }    {'<missing>'   }          NaN
    {'ResStatus' }    {'Tenant'      }    -0.031252
    {'ResStatus' }    {'Home Owner'  }      0.12696
    {'ResStatus' }    {'Other'       }      0.37641
    {'ResStatus' }    {'<missing>'   }          NaN
    {'EmpStatus' }    {'Unknown'     }    -0.076317
    {'EmpStatus' }    {'Employed'    }      0.31449
    {'EmpStatus' }    {'<missing>'   }          NaN
    {'CustIncome'}    {'[-Inf,29000)'}     -0.45716
      ⋮

sc = formatpoints(sc,'Missing','minpoints','WorstAndBestScores',[300 850]);
displaypoints(sc)
ans=37×3 table
      Predictors            Bin           Points
    ______________    ________________    ______

    {'CustAge'   }    {'[-Inf,33)'   }    46.396
    {'CustAge'   }    {'[33,37)'     }    48.727
    {'CustAge'   }    {'[37,40)'     }    58.772
    {'CustAge'   }    {'[40,46)'     }    72.167
    {'CustAge'   }    {'[46,48)'     }    93.256
    {'CustAge'   }    {'[48,58)'     }    95.256
    {'CustAge'   }    {'[58,Inf]'    }    126.46
    {'CustAge'   }    {'<missing>'   }    46.396
    {'ResStatus' }    {'Tenant'      }    62.421
    {'ResStatus' }    {'Home Owner'  }    82.276
    {'ResStatus' }    {'Other'       }    113.58
    {'ResStatus' }    {'<missing>'   }    62.421
    {'EmpStatus' }    {'Unknown'     }    56.765
    {'EmpStatus' }    {'Employed'    }    105.81
    {'EmpStatus' }    {'<missing>'   }    56.765
    {'CustIncome'}    {'[-Inf,29000)'}    8.9706
      ⋮

Значение -32.5389 для <missing> интервал 'CustAge' происходит от 'minPoints' аргумент для formatpoints.

[scr,pts] = score(sc,dataMissing(1:5,:))
scr = 5×1

  602.0394
  648.1988
  560.5569
  613.5595
  646.8109

pts=5×7 table
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance
    _______    _________    _________    __________    _______    _______    _________

    95.256      62.421       56.765        121.18      116.05     86.224       64.15  
    126.46      82.276       105.81        121.18      62.107     86.224       64.15  
    93.256      62.421       105.81        76.585      116.05     42.287       64.15  
    46.396      82.276       105.81        121.18      60.719     86.224      110.96  
    126.46      82.276       105.81        121.18      60.719     86.224       64.15  

Кроме того, вы можете оценить отсутствующие данные для каждого отдельного предиктора с другой статистикой на основе информации о предикторе. Для этого используйте fillmissing для creditscorecard . объекта

load CreditCardData.mat
sc = creditscorecard(data);
sc = fillmissing(sc,'CustAge','constant',35);
predictorinfo(sc,'CustAge')
ans=1×4 table
               PredictorType      LatestBinning      LatestFillMissingType    LatestFillMissingValue
               _____________    _________________    _____________________    ______________________

    CustAge     {'Numeric'}     {'Original Data'}        {'Constant'}                 {[35]}        

sc = fillmissing(sc,'ResStatus','Mode');
predictorinfo(sc,'ResStatus')
ans=1×5 table
                  PredictorType     Ordinal      LatestBinning      LatestFillMissingType    LatestFillMissingValue
                 _______________    _______    _________________    _____________________    ______________________

    ResStatus    {'Categorical'}     false     {'Original Data'}          {'Mode'}               {'Home Owner'}    

sc = autobinning(sc);
sc = fitmodel(sc,'display','off');
sc = formatpoints(sc,'Missing','minpoints','WorstAndBestScores',[300 850]);
 
displaypoints(sc)
ans=37×3 table
      Predictors            Bin           Points
    ______________    ________________    ______

    {'CustAge'   }    {'[-Inf,33)'   }    46.396
    {'CustAge'   }    {'[33,37)'     }    48.727
    {'CustAge'   }    {'[37,40)'     }    58.772
    {'CustAge'   }    {'[40,46)'     }    72.167
    {'CustAge'   }    {'[46,48)'     }    93.256
    {'CustAge'   }    {'[48,58)'     }    95.256
    {'CustAge'   }    {'[58,Inf]'    }    126.46
    {'CustAge'   }    {'<missing>'   }    48.727
    {'ResStatus' }    {'Tenant'      }    62.421
    {'ResStatus' }    {'Home Owner'  }    82.276
    {'ResStatus' }    {'Other'       }    113.58
    {'ResStatus' }    {'<missing>'   }    82.276
    {'EmpStatus' }    {'Unknown'     }    56.765
    {'EmpStatus' }    {'Employed'    }    105.81
    {'EmpStatus' }    {'<missing>'   }    56.765
    {'CustIncome'}    {'[-Inf,29000)'}    8.9706
      ⋮

Значение <missing> для 'CustAge' происходит от значения заливки 35 даже если обучающие данные не имеют отсутствующих значений.

disp(dataMissing(1:5,:));
    CustID    CustAge    TmAtAddress     ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    ___________    _________    __________    _______    _______    _________    ________    ______

      1          53          62         <undefined>    Unknown        50000         55         Yes       1055.9        0.22        0   
      2          61          22         Home Owner     Employed       52000         25         Yes       1161.6        0.24        0   
      3          47          30         Tenant         Employed       37000         61         No        877.23        0.29        0   
      4         NaN          75         Home Owner     Employed       53000         20         Yes       157.37        0.08        0   
      5          68          56         Home Owner     Employed       53000         14         Yes       561.84        0.11        0   
[scr,pts] = score(sc,dataMissing(1:5,:))
scr = 5×1

  621.8943
  648.1988
  560.5569
  615.8904
  646.8109

pts=5×7 table
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance
    _______    _________    _________    __________    _______    _______    _________

    95.256      82.276       56.765        121.18      116.05     86.224       64.15  
    126.46      82.276       105.81        121.18      62.107     86.224       64.15  
    93.256      62.421       105.81        76.585      116.05     42.287       64.15  
    48.727      82.276       105.81        121.18      60.719     86.224      110.96  
    126.46      82.276       105.81        121.18      60.719     86.224       64.15  

Входные параметры

свернуть все

Модель карты показателей кредита, заданная как creditscorecard объект.

Имя creditscorecard предиктор, для которого будут заполнены отсутствующие данные, заданный как скалярный вектор символов, скалярная строка, массив ячеек из векторов символов или строковые массивы.

Типы данных: char | string | cell

Statistic, используемая для заполнения недостающих данных для предикторов, заданных в виде вектора символов или строки с одним из следующих значений.

  • 'mean' - Замените отсутствующие данные средним или средним значением. Опция действительна только для числовых данных. The 'mean' вычисляет взвешенное среднее значение предиктора путем обращения к столбцу предиктора и Weights столбец из creditscorecard объект. Для получения дополнительной информации смотрите Взвешенное среднее.

  • 'median' - Замените отсутствующие данные медианным значением. Действителен для числовых и порядковых данных. The 'median' вычисляет взвешенную медиану предиктора путем обращения к столбцу предиктора и Weights столбец из creditscorecard объект. Для получения дополнительной информации смотрите Взвешенный Медиан.

  • 'mode' - Замените отсутствующие данные на режим. Действителен для числовых и как номинальных, так и порядковых категориальных данных. The 'mode' вычисляет взвешенные mode предиктора путем обращения к столбцу предиктора и Weights столбец из creditscorecard объект. Для получения дополнительной информации смотрите Взвешенный режим.

  • 'original' - Установите отсутствующие данные для числовых и категориальных предикторов назад к его исходному значению: NaN если число, <undefined> или <missing> если категориально.

  • 'constant' - Установите отсутствующие данные для числовых и категориальных предикторов в постоянное значение, которое вы задаете в необязательном аргументе для ConstantValue.

Типы данных: char | string

(Необязательно) Значение для заполнения отсутствующих записей в предикторах, заданных в PredictorNames, заданный как числовое значение, вектор символов, строка или массив ячеек векторов символов.

Примечание

Можно использовать ConstantValue только если вы устанавливаете Statistics аргумент в 'constant'.

Типы данных: char | double | string | cell

Выходные аргументы

свернуть все

Обновленный creditscorecard объект, возвращенный как объект.

Подробнее о

свернуть все

Средневзвешенное

Это weighted mean подобно обычному среднему значению за исключением того, что вместо каждой из точек данных, вносящих одинаковый вклад в окончательное среднее, некоторые точки данных вносят больший вклад, чем другие.

Взвешенное среднее для непустого конечного мультисета данных (x) с соответствующими неотрицательными весами (w), является

x¯=i=1nwixii=1nwi

Взвешенный Медиан

Взвешенная медиана является 50% взвешенным процентилем, где процент в общем весе подсчитывается вместо общего количества.

Для n отдельных упорядоченных элементов (x) положительные веса (w), такие что i=1nwi=1взвешенная медиана является элементом, x k:

i=1k1wi12 и i=k+1nwi12

В случае, когда соответствующие веса обоих элементов граничат с средней точкой набора весов, не инкапсулируя его, каждый элемент задает разбиение, равное 1/2. Эти элементы называются нижней взвешенной медианой и верхней взвешенной медианой. Взвешенная медиана выбирается исходя из того, какой элемент сохраняет разделы наиболее равными. Эта медиана всегда является взвешенной медианой с самым низким весом. В случае, если верхняя и нижняя взвешенные медианы равны, принимается нижняя взвешенная медиана.

Взвешенный режим

weighted mode набора значений взвешенных данных является значение, которое появляется чаще всего.

Режим выборки является элементом, который чаще всего встречается в наборе. Для примера режим выборки [1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17] равен 6.

Ссылки

[1] «Базельский комитет по банковскому надзору: исследования по валидации внутренних рейтинговых систем». Рабочий документ № 14, февраль 2005 года.

[2] Refaat, M. Кредитные карты оценки риска: Разработка и реализация с использованием SAS. lulu.com, 2011.

[3] Loeffler, G. and Posch, P. N. Моделирование кредитного риска с использованием Excel и VBA. Wiley Finance, 2007.

Введенный в R2020a