exponenta event banner

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)' bin, поскольку отсутствующие данные заполнены медианным значением 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> bin of '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 , возвращенный как объект.

Подробнее

свернуть все

Средневзвешенное значение

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

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

x¯=∑i=1nwixi∑i=1nwi

Взвешенная медиана

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

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

∑i=1k−1wi≤12 и ∑i=k+1nwi≤12

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

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

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

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

Ссылки

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

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

[3] Лоэффлер, Г. и Пош, П. Н. Моделирование кредитных рисков с использованием Excel и VBA. Уайли Финанс, 2007.

Представлен в R2020a