コード例 #1
0
        protected List <LogOddRatio> ComputeLogRates()
        {
            var snpCummulativeRate = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_SnPCummlativeDefaultRate();

            var logRateResult = new List <LogOddRatio>();

            //DataTable snpCummulativeRating = snpCummulativeRate.DefaultView.ToTable(false,  SnPCummlativeDefaultRateColumns.Rating );

            foreach (var row in snpCummulativeRate)
            {
                string rating = row.Rating;

                //Type myObjOriginalType = row.GetType();
                //PropertyInfo[] myProps = myObjOriginalType.GetProperties();

                //for (int year = 1; year <= _maxLogRateYear; year++)
                //{
                //double defaultRate = double.Parse(myProps.FirstOrDefault(o => o.Name.ToString() == $"_{row.Years.ToString()}").GetValue(row).ToString());
                double log = Math.Log((1 - row.Value) / row.Value);

                var dataRow = new LogOddRatio();
                dataRow.Rating       = rating;
                dataRow.Year         = row.Years;
                dataRow.LogOddsRatio = log;

                logRateResult.Add(dataRow);
                //}
            }


            return(logRateResult);
        }
コード例 #2
0
        protected List <LogOddRatio> ComputeMarginalDefaultRate()
        {
            var cummulativeDefaultRate = ComputeCummulativeDefaultRate();

            ///Get cummulative values for year 1
            var marginalDefaultRateResult = new List <LogOddRatio>();

            //marginalDefaultRateResult = cummulativeDefaultRate;


            for (int i = 0; i < cummulativeDefaultRate.Count; i++)
            {
                var itm = new LogOddRatio();

                itm.Rank         = cummulativeDefaultRate[i].Rank;
                itm.LogOddsRatio = cummulativeDefaultRate[i].LogOddsRatio;
                itm.Rating       = cummulativeDefaultRate[i].Rating;
                itm.Year         = cummulativeDefaultRate[i].Year;

                if (cummulativeDefaultRate[i].Year != 1)
                {
                    try
                    {
                        var prev = cummulativeDefaultRate.FirstOrDefault(o => o.Year == cummulativeDefaultRate[i].Year - 1 && o.Rank == cummulativeDefaultRate[i].Rank && o.Rating == cummulativeDefaultRate[i].Rating);
                        itm.LogOddsRatio = (cummulativeDefaultRate[i].LogOddsRatio - prev.LogOddsRatio) / (1 - prev.LogOddsRatio);
                    }
                    catch { itm.LogOddsRatio = 1; }
                }
                marginalDefaultRateResult.Add(itm);
            }


            return(marginalDefaultRateResult);
        }
コード例 #3
0
        protected List <LogOddRatio> ComputeLogsOddsRatio()
        {
            var pd12MonthAssumption = new CalibrationInput_PD_CR_RD_Processor().GetPD12MonthsPD(this._eclId, this._eclType);// new ProcessECL_Wholesale_PD(this._eclId).Get_PDI_Assumptions(); //.Get_PDI_12MonthPds();
            var pdInputAssumptions  = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_Assumptions();
            var logRates            = ComputeLogRates();

            var logOddsRatioResult = new List <LogOddRatio>();
            //**********************************************
            string snpMappingInput = PdAssumptionsRowKey.SnpMappingValueBestFit;

            try { snpMappingInput = pdInputAssumptions.FirstOrDefault(o => o.PdGroup == PdInputAssumptionGroupEnum.General && o.Key == ECLNonStringConstants.i.SnpMapping).Value; } catch { }

            for (int rank = 1; rank <= _maxRatingRank; rank++)
            {
                //*****************************
                var _12MonthAssumption = new PDI_Assumptions {
                    Value = PdAssumptionsRowKey.SnpMappingValueBestFit
                };
                if (snpMappingInput == PdAssumptionsRowKey.SnpMappingValueBestFit)
                {
                    _12MonthAssumption = pdInputAssumptions.Where(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditBestFit).FirstOrDefault(o => o.InputName == rank.ToString());
                }
                if (snpMappingInput == PdAssumptionsRowKey.SnpMappingValueEtiCreditPolicy)
                {
                    _12MonthAssumption = pdInputAssumptions.Where(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditEtiPolicy).FirstOrDefault(o => o.InputName == rank.ToString());
                }

                string rating = _12MonthAssumption.Value;// snpMappingInput == _12MonthAssumption.Policy ? _12MonthAssumption.Policy : _12MonthAssumption.Fit;

                //Year 1 computation
                double pdValue = 0;
                try { pdValue = pd12MonthAssumption.FirstOrDefault(o => o.Rating == rank).Months_PDs_12; } catch { pdValue = 0; }// double.Parse(pdInputAssumptions.FirstOrDefault(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditPD && o.InputName == rank.ToString()).Value);

                double year1LogOddRatio = Math.Log((1 - pdValue) / pdValue);

                var dataRow = new LogOddRatio();
                dataRow.Rank         = rank;
                dataRow.Rating       = rating;
                dataRow.Year         = 1;
                dataRow.LogOddsRatio = year1LogOddRatio;
                logOddsRatioResult.Add(dataRow);

                //Year to Max computation
                double year1RatingLogRate = 0;
                try { year1RatingLogRate = logRates.FirstOrDefault(row => row.Rating == rating && row.Year == 1).LogOddsRatio; } catch { }

                for (int year = 2; year <= _maxRatingYear; year++)
                {
                    double currentYearRatingLogRate = logRates.FirstOrDefault(row => row.Rating == rating && row.Year == Math.Min(year, _maxLogRateYear)).LogOddsRatio;

                    double currentYearLogOddRatio = year1LogOddRatio + currentYearRatingLogRate - year1RatingLogRate;

                    var currentYeardataRow = new LogOddRatio();
                    currentYeardataRow.Rank         = rank;
                    currentYeardataRow.Rating       = rating;
                    currentYeardataRow.Year         = year;
                    currentYeardataRow.LogOddsRatio = currentYearLogOddRatio;
                    logOddsRatioResult.Add(currentYeardataRow);
                }
            }

            return(logOddsRatioResult);
        }