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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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

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

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

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

  • 'mode' — Замените недостающие данные на режим. Допустимый для числовых и и номинальных и порядковых категориальных данных. '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. и Posch, P. N. Credit Risk Modeling Using Excel и VBA. Финансы Вайли, 2007.

Введенный в R2020a