LIMCR: Less-Informative Majorities Cleaning Rule Based on Naïve Bayes for Imbalance Learning in Software Defect Prediction
Abstract
:1. Introduction
- We perform an empirical study to investigate the influence of datasets sample size on popular comment classifiers.
- We present a novel resampling method LIMCR based on Naïve Bayes to solve the class imbalance problem in SDP datasets. The new method outperforms other resampling methods on datasets with small sample size.
- We evaluate and compare the proposed method with existing well performance imbalance learning methods including both methods from data level and algorithm level. The experiment presents the effective performance of specified methods on different datasets, respectively.
2. Related Works
2.1. Imbalanced Learning Methods
2.2. Software Defect Prediction
2.3. Classification Algorithms for Class Imbalance
3. Research Methodology
3.1. Overall Structure
3.2. Assumption of Porposed Methods
- All features are independent for the given class label;
- All features are continuous variables and the likelihood of the features is assumed to be Gaussian;
- There is only one majority class in datasets.
3.3. Variable of Sample Information for One Feature
3.4. Variable of Sample Informative Degree
- Order m variables to by absolute values from the smallest absolute difference to the largest, where . Let denote the absolute values and denote the signs of m variables.
- Rank the m variables of with the smallest as 1, if there are elements which have the same value, calculate average rank of these elements. Let denotes the rank.
- Sum the product of and as . Let denote the informative degree of majority sample .
3.5. Finding the Less Informative Majorities
Algorithm 1:LIMCR: Less-informative majorities cleaning rule. |
4. Experiments
4.1. Benchmark Datasets
- Most IR (imbalanced ratio) of SDP datasets range from 2 to 100.
- The sample size of SDP datasets in different projects has a huge disparity. Some small datasets are less than 100, while some large datasets are more than 10,000.
4.2. Performance Metrics
4.3. Research Question and Results
5. Discussion
5.1. Why Hold 3 Digits for Informative Variable D?
5.2. Threats to Validity
- Quality and quantity of datasets for empirical study might be insufficient. Although we have collected more than 100 datasets for illustrating the distribution of sample size and imbalanced ratio in most of SDP datasets, and 29 datasets for investigations in empirical study. It is still hard to confirm if these datasets are typical to reflect characters of SDP data
- The generalization of our method might be limited. The method we proposed focus on binary classification, it improves the performance of predicting if a sample (software model) has any defects but cannot predict the number of defects in it. More types of defect datasets should be considered in the future to reduce the threats.
- The performance evaluating metrics we selected might be partial. There are many metrics such as PD and MCC have been used in binary classification for SDP research. At the same time, F1 is also widely used in SDP, but we do not employ it as it is proved to be biased and unreliable [63]. Although we have considered to select evaluating metrics from two aspects, overall performance and one-class accuracy, however, the limited number of metrics still pose some threats to the construct validity.
- Practical significance of LIMCR in software engineering might be extended. Project members can obtain information on possible defect-prone modules of the software before failure occur by using defect prediction technique, LIMCR has not been applied to predict defect classes/severities [64]. In addition, it is worth studying the performance of LIMCR with different prediction models (within a single project, cross project predictions) [65]. Meanwhile, how to cooperate with instance deletion, missing values replacement, normalization issues mentioned in [66] and defect prediction cost effectiveness [67] also needs further research.
6. Conclusions
- LIMCR together with classifier GNB is a better solution for the imbalance problem on SDP datasets with small datasets which is slightly better than SMOE+GNB.
- On aspect of metric G-mean, LIMCR has the same well performance when cooperates with other classifiers. On aspect of metric balancedscore, when cooperating with LIMCR, GNB performs significantly better than other classifiers.
- Number of features in a datasets has no influence on LIMCR, but the performance turn significantly worse when the number of features less than 5.
- When the sample size bigger than 1100, performance of LIMCR is worse than IHT, so when sample size bigger than 1100, IHT is recommended as the best imbalanced learning method for SDP.
Author Contributions
Funding
Conflicts of Interest
References
- Tong, H.; Liu, B.; Wang, S. Software defect prediction using stacked denoising autoencoders and two-stage ensemble learning. Inf. Softw. Technol. 2018, 96, 94–111. [Google Scholar] [CrossRef]
- Chen, L.; Fang, B.; Shang, Z.; Tang, Y. Tackling class overlap and imbalance problems in software defect prediction. Softw. Qual. J. 2018, 26, 97–125. [Google Scholar] [CrossRef]
- Limsettho, N.; Bennin, K.E.; Keung, J.W.; Hata, H.; Matsumoto, K. Cross project defect prediction using class distribution estimation and oversampling. Inf. Softw. Technol. 2018, 100, 87–102. [Google Scholar] [CrossRef]
- Galar, M.; Fernandez, A.; Barrenechea, E.; Bustince, H.; Herrera, F. A review on ensembles for the class imbalance problem: Bagging-, boosting-, and hybrid-based approaches. IEEE Trans. Syst. Man Cybern. Part C Appl. Rev. 2011, 42, 463–484. [Google Scholar] [CrossRef]
- Błaszczyński, J.; Stefanowski, J. Neighbourhood sampling in bagging for imbalanced data. Neurocomputing 2015, 150, 529–542. [Google Scholar] [CrossRef]
- Chawla, N.V.; Bowyer, K.W.; Hall, L.O.; Kegelmeyer, W.P. SMOTE: Synthetic minority over-sampling technique. J. Artif. Intell. Res. 2002, 16, 321–357. [Google Scholar] [CrossRef]
- Laurikkala, J. Improving identification of difficult small classes by balancing class distribution. In Proceedings of the Conference on Artificial Intelligence in Medicine in Europe, Cascais, Portugal, 1–4 July 2001; pp. 63–66. [Google Scholar]
- Chen, S.; He, H.; Garcia, E.A. RAMOBoost: Ranked minority oversampling in boosting. IEEE Trans. Neural Netw. 2010, 21, 1624–1642. [Google Scholar] [CrossRef]
- Freund, Y.; Schapire, R. Experiments with a new boosting algorithm. In Proceedings of the Thirteenth International Conference (ICML 1996), Bari, Italy, 3–6 July 1996; pp. 148–156. [Google Scholar]
- Breiman, L. Bagging predictors. Mach. Learn. 1996, 24, 123–140. [Google Scholar] [CrossRef] [Green Version]
- Fan, W.; Stolfo, S.J.; Zhang, J.; Chan, P.K. AdaCost: Misclassification Cost-Sensitive Boosting. In Proceedings of the Sixteenth International Conference on Machine Learning (ICML ’99); Morgan Kaufmann Publishers Inc.: San Francisco, CA, USA, 1999; Volume 99, pp. 97–105. [Google Scholar]
- Freund, Y.; Schapire, R.E. A decision-theoretic generalization of on-line learning and an application to boosting. J. Comput. Syst. Sci. 1997, 55, 119–139. [Google Scholar] [CrossRef] [Green Version]
- Lusa, L.; Blagus, R. Class prediction for high-dimensional class-imbalanced data. BMC Bioinform. 2010, 11, 523. [Google Scholar]
- García, V.; Sánchez, J.S.; Mollineda, R.A. On the effectiveness of preprocessing methods when dealing with different levels of class imbalance. Knowl. Based Syst. 2012, 25, 13–21. [Google Scholar] [CrossRef]
- Wang, S.; Yao, X. Diversity analysis on imbalanced data sets by using ensemble models. In Proceedings of the 2009 IEEE Symposium on Computational Intelligence and Data Mining, Nashville, TN, USA, 30 March–2 April 2009; pp. 324–331. [Google Scholar]
- Díez-Pastor, J.F.; Rodríguez, J.J.; García-Osorio, C.I.; Kuncheva, L.I. Diversity techniques improve the performance of the best imbalance learning ensembles. Inf. Ences 2015, 325, 98–117. [Google Scholar] [CrossRef]
- Weiss, G.M.; Provost, F. The Effect of Class Distribution on Classifier Learning; Technical Report ML-TR-44; Department of Computer Science, Rutgers University: New Brunswick, NJ, USA, 2001. [Google Scholar]
- Khoshgoftaar, T.M.; Van Hulse, J.; Napolitano, A. Comparing boosting and bagging techniques with noisy and imbalanced data. IEEE Trans. Syst. Man Cybern. Part A Syst. Hum. 2010, 41, 552–568. [Google Scholar] [CrossRef]
- More, A. Survey of resampling techniques for improving classification performance in unbalanced datasets. arXiv 2016, arXiv:1608.06048. [Google Scholar]
- He, H.; Garcia, E.A. Learning from imbalanced data. IEEE Trans. Knowl. Data Eng. 2009, 21, 1263–1284. [Google Scholar]
- He, H.; Bai, Y.; Garcia, E.A.; Li, S. ADASYN: Adaptive synthetic sampling approach for imbalanced learning. In Proceedings of the 2008 IEEE International Joint Conference on Neural Networks (IEEE World Congress on Computational Intelligence), Hong Kong, China, 1–8 June 2008. [Google Scholar]
- Han, H.; Wang, W.; Mao, B. Borderline-SMOTE: A New Over-Sampling Method in Imbalanced Data Sets Learning. In Proceedings of the International Conference on Intelligent Computing 2005, Hefei, China, 23–26 August 2005; pp. 878–887. [Google Scholar]
- Barua, S.; Islam, M.M.; Yao, X.; Murase, K. MWMOTE–majority weighted minority oversampling technique for imbalanced data set learning. IEEE Trans. Knowl. Data Eng. 2012, 26, 405–425. [Google Scholar] [CrossRef]
- Bunkhumpornpat, C.; Sinapiromsaran, K.; Lursinsap, C. Safe-level-smote: Safe-level-synthetic minority over-sampling technique for handling the class imbalanced problem. In Proceedings of the Pacific-Asia Conference on Knowledge Discovery and Data Mining, Bangkok, Thailand, 27–30 April 2009; pp. 475–482. [Google Scholar]
- Batista, G.E.; Prati, R.C.; Monard, M.C. A study of the behavior of several methods for balancing machine learning training data. ACM SIGKDD Explor. Newsl. 2004, 6, 20–29. [Google Scholar] [CrossRef]
- Sun, Z.; Song, Q.; Zhu, X.; Sun, H.; Xu, B.; Zhou, Y. A novel ensemble method for classifying imbalanced data. Pattern Recognit. 2015, 48, 1623–1637. [Google Scholar] [CrossRef]
- Wang, S.; Yao, X. Using class imbalance learning for software defect prediction. IEEE Trans. Reliab. 2013, 62, 434–443. [Google Scholar] [CrossRef] [Green Version]
- Chawla, N.V.; Lazarevic, A.; Hall, L.O.; Bowyer, K.W. SMOTEBoost: Improving prediction of the minority class in boosting. In Proceedings of the European Conference on Principles of Data Mining and Knowledge Discovery, Cavtat-Dubrovnik, Croatia, 22–26 September 2003; pp. 107–119. [Google Scholar]
- Menzies, T.; Turhan, B.; Bener, A.; Gay, G.; Cukic, B.; Jiang, Y. Implications of ceiling effects in defect predictors. In Proceedings of the 4th International Workshop on Predictor Models in Software Engineering, Leipzig, Germany, 12–13 May 2008; pp. 47–54. [Google Scholar]
- Hart, P. The condensed nearest neighbor rule (Corresp.). IEEE Trans. Inf. Theory 1968, 14, 515–516. [Google Scholar] [CrossRef]
- Tomek, I. Two modifications of CNN. IEEE Trans. Syst. Man Cybern. 1976. [Google Scholar] [CrossRef] [Green Version]
- Wilson, D.L. Asymptotic properties of nearest neighbor rules using edited data. IEEE Trans. Syst. Man Cybern. 1972, 408–421. [Google Scholar] [CrossRef] [Green Version]
- Kubat, M.; Matwin, S. Addressing the Curse of Imbalanced Training Sets: One-Sided Selection. In Proceedings of the 14th International Conference on Machine Learning (ICML 1997), Nashville, TN, USA, 8–12 July 1997; Volume 97, pp. 179–186. [Google Scholar]
- Smith, M.R.; Martinez, T.; Giraud-Carrier, C. An instance level analysis of data complexity. Mach. Learn. 2014, 95, 225–256. [Google Scholar] [CrossRef] [Green Version]
- Gupta, S.; Gupta, A. A set of measures designed to identify overlapped instances in software defect prediction. Computing 2017, 99, 889–914. [Google Scholar] [CrossRef]
- Liu, X.Y.; Wu, J.; Zhou, Z.H. Exploratory undersampling for class-imbalance learning. IEEE Trans. Syst. Man Cybern. Part B Cybern. 2008, 39, 539–550. [Google Scholar]
- Wang, T.; Zhang, Z.; Jing, X.; Zhang, L. Multiple kernel ensemble learning for software defect prediction. Autom. Softw. Eng. 2016, 23, 569–590. [Google Scholar] [CrossRef]
- McCabe, T.J. A complexity measure. IEEE Trans. Softw. Eng. 1976, 308–320. [Google Scholar] [CrossRef]
- Maurice, H.H. Elements of Software Science; Elsevier: New York, NY, USA, 1977. [Google Scholar]
- Song, Q.; Guo, Y.; Shepperd, M. A comprehensive investigation of the role of imbalanced learning for software defect prediction. IEEE Trans. Softw. Eng. 2018, 45, 1253–1269. [Google Scholar] [CrossRef] [Green Version]
- Malhotra, R.; Khanna, M. An empirical study for software change prediction using imbalanced data. Empir. Softw. Eng. 2017, 22, 2806–2851. [Google Scholar] [CrossRef]
- Kim, S.; Zhang, H.; Wu, R.; Gong, L. Dealing with noise in defect prediction. In Proceedings of the 2011 33rd International Conference on Software Engineering (ICSE), Honolulu, HI, USA, 21–28 May 2011; pp. 481–490. [Google Scholar]
- Wang, H.; Khoshgoftaar, T.M.; Napolitano, A. Software measurement data reduction using ensemble techniques. Neurocomputing 2012, 92, 124–132. [Google Scholar] [CrossRef]
- John, G.H.; Langley, P. Estimating continuous distributions in Bayesian classifiers. arXiv 2013, arXiv:1302.4964. [Google Scholar]
- Haykin, S. Neural Networks: A Comprehensive Foundation; Prentice-Hall, Inc.: Upper Saddle River, NJ, USA, 2007. [Google Scholar]
- Aha, D.W.; Kibler, D.; Albert, M.K. Instance-based learning algorithms. Mach. Learn. 1991, 6, 37–66. [Google Scholar] [CrossRef] [Green Version]
- Le Cessie, S.; Van Houwelingen, J.C. Ridge estimators in logistic regression. J. R. Stat. Soc. Ser. C Appl. Stat. 1992, 41, 191–201. [Google Scholar] [CrossRef]
- Safavian, S.R.; Landgrebe, D. A survey of decision tree classifier methodology. IEEE Trans. Syst. Man Cybern. 1991, 21, 660–674. [Google Scholar] [CrossRef] [Green Version]
- Saunders, C.; Stitson, M.O.; Weston, J.; Holloway, R.; Bottou, L.; Scholkopf, B.; Smola, A. Support Vector Machine. Comput. Sci. 2002, 1, 1–28. [Google Scholar]
- Haykin, S.; Network, N. A comprehensive foundation. Neural Netw. 2004, 2, 41. [Google Scholar]
- Xiao, J.; Xie, L.; He, C.; Jiang, X. Dynamic classifier ensemble model for customer classification with imbalanced class distribution. Expert Syst. Appl. 2012, 39, 3668–3675. [Google Scholar] [CrossRef]
- Del Río, S.; López, V.; Benítez, J.M.; Herrera, F. On the use of MapReduce for imbalanced big data using Random Forest. Inf. Sci. 2014, 285, 112–137. [Google Scholar] [CrossRef]
- Jureczko, M.; Madeyski, L. Towards identifying software project clusters with regard to defect prediction. In Proceedings of the 6th International Conference on Predictive Models in Software Engineering, Timisoara, Romania, 12–13 September 2010; pp. 1–10. [Google Scholar]
- Menzies, T.; Di Stefano, J.S. How good is your blind spot sampling policy. In Proceedings of the Eighth IEEE International Symposium on High Assurance Systems Engineering, Tampa, FL, USA, 25–26 March 2004; pp. 129–138. [Google Scholar]
- Zimmermann, T.; Premraj, R.; Zeller, A. Predicting defects for eclipse. In Proceedings of the Third International Workshop on Predictor Models in Software Engineering (PROMISE’07: ICSE Workshops 2007), Minneapolis, MN, USA, 20–26 May 2007; p. 9. [Google Scholar]
- Brodersen, K.H.; Ong, C.S.; Stephan, K.E.; Buhmann, J.M. The balanced accuracy and its posterior distribution. In Proceedings of the 2010 20th International Conference on Pattern Recognition, Istanbul, Turkey, 23–26 August 2010; pp. 3121–3124. [Google Scholar]
- Buitinck, L.; Louppe, G.; Blondel, M.; Pedregosa, F.; Mueller, A.; Grisel, O.; Niculae, V.; Prettenhofer, P.; Gramfort, A.; Grobler, J.; et al. API design for machine learning software: Experiences from the scikit-learn project. arXiv 2013, arXiv:1309.0238. [Google Scholar]
- Pedregosa, F.; Varoquaux, G.; Gramfort, A.; Michel, V.; Thirion, B.; Grisel, O.; Blondel, M.; Prettenhofer, P.; Weiss, R.; Dubourg, V.; et al. Scikit-learn: Machine learning in Python. J. Mach. Learn. Res. 2011, 12, 2825–2830. [Google Scholar]
- Japkowicz, N.; Shah, M. Evaluating Learning Algorithms: A Classification Perspective; Cambridge University Press: Cambridge, UK, 2011. [Google Scholar]
- Stefanowski, J.; Wilk, S. Selective pre-processing of imbalanced data for improving classification performance. In Proceedings of the International Conference on Data Warehousing and Knowledge Discovery, Turin, Italy, 1–5 September 2008; pp. 283–292. [Google Scholar]
- Kamei, Y.; Monden, A.; Matsumoto, S.; Kakimoto, T.; Matsumoto, K.I. The effects of over and under sampling on fault-prone module detection. In Proceedings of the First International Symposium on Empirical Software Engineering and Measurement (ESEM 2007), Madrid, Spain, 20–21 September 2007; pp. 196–204. [Google Scholar]
- Lemaître, G.; Nogueira, F.; Aridas, C.K. Imbalanced-learn: A python toolbox to tackle the curse of imbalanced datasets in machine learning. J. Mach. Learn. Res. 2017, 18, 559–563. [Google Scholar]
- Yao, J.; Shepperd, M. Assessing software defection prediction performance: Why using the Matthews correlation coefficient matters. In Proceedings of the Evaluation and Assessment in Software Engineering, Trondheim, Norway, 15–17 April 2020; ACM: New York, NY, USA, 2020; pp. 120–129. [Google Scholar]
- Janczarek, P.; Sosnowski, J. Investigating software testing and maintenance reports: Case study. Inf. Softw. Technol. 2015, 58, 272–288. [Google Scholar] [CrossRef]
- Korpalski, M.; Sosnowski, J. Correlating software metrics with software defects. In Proceedings of the Photonics Applications in Astronomy, Communications, Industry, and High-Energy Physics Experiments 2018, Wilga, Poland, 1 October 2018; International Society for Optics and Photonics: Bellingham, WA, USA, 2018; Volume 10808, p. 108081P. [Google Scholar]
- Pandey, S.K.; Mishra, R.B.; Tripathi, A.K. BPDET: An effective software bug prediction model using deep representation and ensemble learning techniques. Expert Syst. Appl. 2020, 144, 113085. [Google Scholar] [CrossRef]
- Hryszko, J.; Madeyski, L. Assessment of the software defect prediction cost effectiveness in an industrial project. In Software Engineering: Challenges and Solutions; Springer: New York, NY, USA, 2017; pp. 77–90. [Google Scholar]
Dataset | Abbreviation | Feature | Sample Size | Label = 1 | Label = 0 | IR |
---|---|---|---|---|---|---|
synapse-1.2 | synapse-1.2 | 20 | 256 | 86 | 170 | 1.977 |
jedit-3.2 | jedit-3.2 | 20 | 272 | 90 | 182 | 2.022 |
synapse-1.1 | synapse-1.1 | 20 | 222 | 60 | 162 | 2.700 |
log4j-1.0 | log4j-1.0 | 20 | 135 | 34 | 101 | 2.971 |
jedit-4.0 | jedit-4.0 | 20 | 306 | 75 | 231 | 3.080 |
ant-1.7 | ant-1.7 | 20 | 745 | 166 | 579 | 3.488 |
camel-1.6 | camel-1.6 | 20 | 965 | 188 | 777 | 4.133 |
camel-1.4 | camel-1.4 | 20 | 872 | 145 | 727 | 5.014 |
Xerces-1.3 | Xerces-1.3 | 20 | 453 | 69 | 384 | 5.565 |
Xalan-2.4 | Xalan-2.4 | 20 | 723 | 110 | 613 | 5.573 |
jedit-4.2 | jedit-4.2 | 20 | 367 | 48 | 319 | 6.646 |
arc | arc | 20 | 234 | 27 | 207 | 7.667 |
synapse-1.0 | synapse-1.0 | 20 | 157 | 16 | 141 | 8.813 |
tomcat | tomcat | 20 | 858 | 77 | 781 | 10.143 |
camel-1.0 | camel-1.0 | 20 | 339 | 13 | 326 | 25.077 |
PC5 | PC5 | 38 | 1694 | 458 | 1236 | 2.699 |
KC1 | KC1 | 21 | 1162 | 294 | 868 | 2.952 |
JM1 | JM1 | 21 | 7720 | 1612 | 6108 | 3.789 |
prop-5 | prop-5 | 20 | 8516 | 1299 | 7217 | 5.556 |
prop-1 | prop-1 | 20 | 18,471 | 2738 | 15,733 | 5.746 |
eclipse-metrics-files-3.0 | ec -3.0 | 198 | 10,593 | 1568 | 9025 | 5.7557 |
eclipse-metrics-files-2.0 | ec2.0 | 198 | 6729 | 975 | 5754 | 5.902 |
PC4 | PC4 | 37 | 1270 | 176 | 1094 | 6.216 |
PC3 | PC3 | 37 | 1053 | 130 | 923 | 7.100 |
prop-3 | prop-3 | 20 | 10,274 | 1180 | 9094 | 7.707 |
eclipse-metrics-files-2.1 | ec -2.1 | 198 | 7888 | 854 | 7034 | 8.237 |
prop-2 | prop-2 | 20 | 23,014 | 2431 | 20,583 | 8.467 |
prop-4 | prop-4 | 20 | 8718 | 840 | 7878 | 9.379 |
MC1 | MC1 | 38 | 1952 | 36 | 1916 | 53.222 |
Actual Buggy | Actual Clean | |
---|---|---|
Predict Buggy (Positive) | ||
Predict Clean (Negative) |
Classifier | Abbreviation | Parameters |
---|---|---|
AdaBoostClassifier | ABC | n_estimators = 5 |
BaggingClassifier | Bgg | base_estimator = DecisionTree, n_estimators = 18 |
GaussianNB | GNB | var_smoothing = 1 × 10 |
KNeighborsClassifier | Knn | n_neighbors = 10 |
RandomForest | RF | n_estimators = 50, max_depth = 3, min_samples_leaf = 4 |
SVC | SVC | default |
DecisionTreeClassifier | DTC | max_depth = 3, min_samples_leaf = 4 |
MLPClassifier | MLP | solver = ‘lbfgs’, hidden_layer_sizes = (10,500) |
LogisticRegression | LR | default |
Data | Sample Size | ABC | Bgg | DTC | GNB | Knn | LR | MLP | RF | SVC |
---|---|---|---|---|---|---|---|---|---|---|
log4j-1.0 | 135 | 0.563 | 0.611 | 0.441 | 0.608 | 0.26 | 0.472 | 0.472 | 0.432 | 0.392 |
synapse-1.0 | 157 | 0.26 | 0.086 | 0.181 | 0.646 | 0.205 | 0.256 | 0.164 | 0.037 | 0 |
synapse-1.1 | 222 | 0.446 | 0.374 | 0.379 | 0.724 | 0.164 | 0.462 | 0.45 | 0.415 | 0.486 |
arc | 234 | 0.254 | 0.192 | 0.155 | 0.762 | 0.05 | 0.232 | 0.263 | 0.125 | 0.167 |
synapse-1.2 | 256 | 0.559 | 0.537 | 0.554 | 0.473 | 0.506 | 0.464 | 0.46 | 0.503 | 0.01 |
jedit-3.2 | 272 | 0.624 | 0.662 | 0.584 | 0.586 | 0.444 | 0.613 | 0.587 | 0.61 | 0.662 |
jedit-4.0 | 306 | 0.512 | 0.454 | 0.453 | 0.408 | 0.323 | 0.375 | 0.272 | 0.44 | 0.353 |
camel-1.0 | 339 | 0.025 | 0.033 | 0 | 0.341 | 0 | 0.06 | 0.25 | 0 | 0 |
jedit-4.2 | 367 | 0.341 | 0.257 | 0.275 | 0.418 | 0.118 | 0.335 | 0.13 | 0.192 | 0.274 |
Xerces-1.3 | 453 | 0.393 | 0.295 | 0.39 | 0.457 | 0.033 | 0.319 | 0.047 | 0.298 | 0.409 |
Xalan-2.4 | 723 | 0.253 | 0.111 | 0.209 | 0.382 | 0.126 | 0.202 | 0.09 | 0.104 | 0.089 |
ant-1.7 | 745 | 0.459 | 0.475 | 0.445 | 0.555 | 0.413 | 0.358 | 0.405 | 0.422 | 0.388 |
tomcat | 858 | 0.229 | 0.125 | 0.177 | 0.38 | 0.006 | 0.197 | 0.082 | 0.088 | 0.228 |
camel-1.4 | 872 | 0.268 | 0.069 | 0.132 | 0.288 | 0.034 | 0.119 | 0.09 | 0.036 | 0.004 |
camel-1.6 | 965 | 0.194 | 0.119 | 0.144 | 0.248 | 0.025 | 0.138 | 0.104 | 0.044 | 0.036 |
PC3 | 1053 | 0.325 | 0.131 | 0.317 | 0.876 | 0.137 | 0.142 | 0.035 | 0.002 | 0 |
KC1 | 1162 | 0.374 | 0.301 | 0.36 | 0.234 | 0.258 | 0.238 | 0.211 | 0.2 | 0.01 |
PC4 | 1270 | 0.516 | 0.467 | 0.54 | 0.064 | 0.097 | 0.428 | 0.074 | 0.035 | 0.01 |
PC5 | 1694 | 0.482 | 0.387 | 0.47 | 0.112 | 0.335 | 0.228 | 0.217 | 0.228 | 0.029 |
MC1 | 1952 | 0.297 | 0.126 | 0.262 | 0.272 | 0.02 | 0.026 | 0.14 | 0 | 0 |
ec -2.1 | 6729 | 0.222 | 0.173 | 0.289 | 0.253 | 0.212 | 0.134 | 0.043 | 0.066 | 0.009 |
JM1 | 7720 | 0.344 | 0.191 | 0.332 | 0.062 | 0.198 | 0.102 | 0.154 | 0.073 | 0.011 |
ec2.0 | 7888 | 0.389 | 0.352 | 0.422 | 0.304 | 0.339 | 0.248 | 0.114 | 0.186 | 0.047 |
prop-5 | 8516 | 0.232 | 0.183 | 0.228 | 0.157 | 0.172 | 0.047 | 0.023 | 0.016 | 0.037 |
prop-4 | 8718 | 0.172 | 0.161 | 0.199 | 0.233 | 0.135 | 0.113 | 0.06 | 0.055 | 0.016 |
prop-3 | 10,274 | 0.148 | 0.13 | 0.137 | 0.156 | 0.101 | 0.029 | 0.018 | 0.002 | 0.037 |
ec3.0 | 10,593 | 0.297 | 0.234 | 0.358 | 0.253 | 0.266 | 0.157 | 0.141 | 0.104 | 0.025 |
prop-1 | 18,471 | 0.353 | 0.315 | 0.349 | 0.258 | 0.289 | 0.107 | 0.051 | 0.073 | 0.136 |
prop-2 | 23,014 | 0.33 | 0.317 | 0.362 | 0.208 | 0.203 | 0.037 | 0.024 | 0.014 | 0.063 |
Average recall | 0.340 | 0.271 | 0.315 | 0.370 | 0.189 | 0.229 | 0.178 | 0.166 | 0.135 | |
Average Friedman rank | 2.172 | 4.259 | 3.362 | 3.103 | 6.086 | 5.138 | 6.569 | 7.121 | 7.190 |
Datasets | Average | ABC | Bgg | DTC | GNB | Knn | LR | MLP | RF | SVC |
---|---|---|---|---|---|---|---|---|---|---|
Small datasets | Recall value | 0.357 | 0.283 | 0.302 | 0.510 | 0.178 | 0.297 | 0.244 | 0.234 | 0.219 |
Rank value | 2.563 | 4.719 | 4.656 | 2.000 | 7.469 | 4.469 | 6.156 | 6.531 | 6.438 | |
Large datasets | Recall value | 0.320 | 0.257 | 0.331 | 0.197 | 0.202 | 0.146 | 0.098 | 0.081 | 0.033 |
Rank value | 1.692 | 3.692 | 1.769 | 4.462 | 4.385 | 5.962 | 7.077 | 7.846 | 8.115 |
Metric | Friedman Test | Nemenyi Analysis (CD) | ||
---|---|---|---|---|
Small datasets | Recall | <<0.00001 | 3.003 | = 0.05 |
G-mean | <<0.00001 | 3.003 | = 0.05 | |
AUC | <<0.00001 | 3.003 | = 0.05 | |
Large datasets | Recall | <<0.00001 | 3.332 | = 0.05 |
G-mean | <<0.00001 | 3.332 | = 0.05 | |
AUC | <<0.00001 | 3.332 | = 0.05 |
Level | Category | Imbalance Learning Method | Abbreviation | Parameters |
---|---|---|---|---|
Data | Over-sampling | Borderline-SMOTE [22] | B-SMO | Default |
Under-sampling | Neighbourhood Cleaningrule [7] | NCL | Default | |
Instance hardness threshold [34] | IHT | Default | ||
Combination of over- and under-sampling methods | SMOTE+ENN [25] | SMOE | Default | |
Algorithm | Algorithm | RUSBoost | RUSB | Default |
EasyEnsemble | EasyE | Default |
LIMCR | SMOE | IHT | B-SMO | NCL | RUSB | EasyE | |
---|---|---|---|---|---|---|---|
synapse-1.2 | 0.729 | 0.699 | 0.715 | 0.627 | 0.711 | 0.537 | 0.682 |
jedit-3.2 | 0.703 | 0.669 | 0.72 | 0.73 | 0.689 | 0.53 | 0.645 |
synapse-1.1 | 0.692 | 0.684 | 0.643 | 0.617 | 0.594 | 0.568 | 0.522 |
log4j-1.0 | 0.772 | 0.645 | 0.602 | 0.684 | 0.782 | 0.511 | 0.623 |
jedit-4.0 | 0.758 | 0.708 | 0.64 | 0.692 | 0.708 | 0.556 | 0.66 |
ant-1.7 | 0.78 | 0.754 | 0.717 | 0.709 | 0.763 | 0.588 | 0.668 |
camel-1.6 | 0.608 | 0.616 | 0.59 | 0.594 | 0.605 | 0.543 | 0.58 |
camel-1.4 | 0.656 | 0.665 | 0.658 | 0.578 | 0.605 | 0.56 | 0.603 |
Xerces-1.3 | 0.693 | 0.787 | 0.761 | 0.719 | 0.65 | 0.502 | 0.493 |
Xalan-2.4 | 0.68 | 0.65 | 0.68 | 0.68 | 0.684 | 0.55 | 0.668 |
jedit-4.2 | 0.758 | 0.759 | 0.727 | 0.73 | 0.722 | 0.705 | 0.76 |
arc | 0.561 | 0.659 | 0.583 | 0.443 | 0.616 | 0.622 | 0.554 |
synapse-1.0 | 0.741 | 0.754 | 0.723 | 0.658 | 0.554 | 0.402 | 0.679 |
tomcat | 0.735 | 0.857 | 0.605 | 0.687 | 0.677 | 0.488 | 0.691 |
camel-1.0 | 0.654 | 0.54 | 0.608 | 0.811 | 0.679 | 0.624 | 0.698 |
Average | 0.701 | 0.696 | 0.665 | 0.664 | 0.669 | 0.552 | 0.635 |
Friedman rank | 2.467 | 2.767 | 3.933 | 4 | 3.567 | 6.4 | 4.867 |
LIMCR | SMOE | IHT | B-SMO | NCL | RUSB | EasyE | |
---|---|---|---|---|---|---|---|
synapse-1.2 | 0.721 | 0.698 | 0.714 | 0.603 | 0.707 | 0.341 | 0.681 |
jedit-3.2 | 0.692 | 0.669 | 0.703 | 0.709 | 0.671 | 0.377 | 0.639 |
synapse-1.1 | 0.672 | 0.677 | 0.643 | 0.616 | 0.59 | 0.402 | 0.517 |
log4j-1.0 | 0.76 | 0.619 | 0.595 | 0.666 | 0.779 | 0.26 | 0.6 |
jedit-4.0 | 0.755 | 0.702 | 0.638 | 0.681 | 0.698 | 0.361 | 0.628 |
ant-1.7 | 0.78 | 0.749 | 0.71 | 0.697 | 0.755 | 0.481 | 0.668 |
camel-1.6 | 0.555 | 0.578 | 0.589 | 0.501 | 0.531 | 0.431 | 0.569 |
camel-1.4 | 0.65 | 0.663 | 0.653 | 0.504 | 0.549 | 0.41 | 0.594 |
Xerces-1.3 | 0.675 | 0.786 | 0.732 | 0.694 | 0.619 | 0.281 | 0.47 |
Xalan-2.4 | 0.665 | 0.635 | 0.63 | 0.649 | 0.658 | 0.444 | 0.667 |
jedit-4.2 | 0.757 | 0.759 | 0.673 | 0.73 | 0.699 | 0.699 | 0.75 |
arc | 0.558 | 0.649 | 0.581 | 0.383 | 0.612 | 0.563 | 0.553 |
synapse-1.0 | 0.741 | 0.749 | 0.711 | 0.658 | 0.539 | 0 | 0.678 |
tomcat | 0.735 | 0.857 | 0.604 | 0.661 | 0.659 | 0.162 | 0.67 |
camel-1.0 | 0.635 | 0.521 | 0.598 | 0.808 | 0.655 | 0.582 | 0.698 |
Average | 0.69 | 0.687 | 0.652 | 0.637 | 0.648 | 0.386 | 0.625 |
Friedman rank | 2.533 | 2.6 | 3.8 | 4.2 | 3.833 | 6.633 | 4.4 |
LIMCR vs. SMOE | LIMCR vs. IHT | LIMCR vs. B-SMO | LIMCR vs. NCL | |
---|---|---|---|---|
Balancedscore | 0.532 | 0.043 | 0.031 | 0.041 |
G-mean | 0.691 | 0.047 | 0.198 | 0.011 |
Datasets | ILMCR | SMOE | IHT | ||||||
---|---|---|---|---|---|---|---|---|---|
GNB | DTC | ABC | GNB | DTC | ABC | GNB | DTC | ABC | |
synapse-1.2 | 0.729 | 0.701 | 0.689 | 0.699 | 0.713 | 0.719 | 0.715 | 0.663 | 0.663 |
jedit-3.2 | 0.703 | 0.743 | 0.73 | 0.669 | 0.698 | 0.716 | 0.72 | 0.731 | 0.733 |
synapse-1.1 | 0.692 | 0.64 | 0.691 | 0.684 | 0.537 | 0.657 | 0.643 | 0.596 | 0.742 |
log4j-1.0 | 0.772 | 0.732 | 0.726 | 0.645 | 0.75 | 0.762 | 0.602 | 0.75 | 0.685 |
jedit-4.0 | 0.758 | 0.666 | 0.734 | 0.708 | 0.63 | 0.652 | 0.64 | 0.659 | 0.71 |
ant-1.7 | 0.78 | 0.778 | 0.718 | 0.754 | 0.739 | 0.687 | 0.717 | 0.768 | 0.779 |
camel-1.6 | 0.608 | 0.599 | 0.595 | 0.616 | 0.635 | 0.657 | 0.59 | 0.599 | 0.643 |
camel-1.4 | 0.656 | 0.525 | 0.529 | 0.665 | 0.588 | 0.612 | 0.658 | 0.591 | 0.597 |
Xerces-1.3 | 0.693 | 0.659 | 0.666 | 0.787 | 0.698 | 0.745 | 0.761 | 0.684 | 0.682 |
Xalan-2.4 | 0.68 | 0.639 | 0.549 | 0.65 | 0.657 | 0.7 | 0.68 | 0.708 | 0.725 |
jedit-4.2 | 0.758 | 0.674 | 0.636 | 0.759 | 0.756 | 0.737 | 0.727 | 0.686 | 0.734 |
arc | 0.561 | 0.604 | 0.569 | 0.659 | 0.502 | 0.649 | 0.583 | 0.526 | 0.507 |
synapse-1.0 | 0.741 | 0.679 | 0.652 | 0.754 | 0.688 | 0.696 | 0.723 | 0.732 | 0.759 |
tomcat | 0.735 | 0.639 | 0.726 | 0.857 | 0.776 | 0.786 | 0.605 | 0.752 | 0.779 |
camel-1.0 | 0.654 | 0.751 | 0.694 | 0.54 | 0.782 | 0.624 | 0.608 | 0.74 | 0.778 |
Average | 0.701 | 0.669 | 0.66 | 0.696 | 0.677 | 0.693 | 0.665 | 0.679 | 0.701 |
Rank | 3.567 | 5.9 | 6.467 | 4.2 | 5.567 | 4.2 | 5.9 | 5.367 | 3.833 |
Datasets | ILMCR | SMOE | IHT | ||||||
---|---|---|---|---|---|---|---|---|---|
GNB | DTC | ABC | GNB | DTC | ABC | GNB | DTC | ABC | |
synapse-1.2 | 0.721 | 0.688 | 0.689 | 0.698 | 0.713 | 0.717 | 0.714 | 0.66 | 0.66 |
jedit-3.2 | 0.692 | 0.74 | 0.73 | 0.669 | 0.64 | 0.685 | 0.703 | 0.725 | 0.73 |
synapse-1.1 | 0.672 | 0.639 | 0.69 | 0.677 | 0.511 | 0.638 | 0.643 | 0.552 | 0.734 |
log4j-1.0 | 0.76 | 0.732 | 0.724 | 0.619 | 0.745 | 0.759 | 0.595 | 0.745 | 0.677 |
jedit-4.0 | 0.755 | 0.632 | 0.734 | 0.702 | 0.623 | 0.622 | 0.638 | 0.656 | 0.709 |
ant-1.7 | 0.78 | 0.772 | 0.717 | 0.749 | 0.723 | 0.671 | 0.71 | 0.766 | 0.778 |
camel-1.6 | 0.555 | 0.592 | 0.594 | 0.578 | 0.606 | 0.644 | 0.589 | 0.599 | 0.638 |
camel-1.4 | 0.65 | 0.522 | 0.514 | 0.663 | 0.559 | 0.586 | 0.653 | 0.591 | 0.587 |
Xerces-1.3 | 0.675 | 0.657 | 0.666 | 0.786 | 0.687 | 0.719 | 0.732 | 0.682 | 0.678 |
Xalan-2.4 | 0.665 | 0.613 | 0.542 | 0.635 | 0.645 | 0.671 | 0.63 | 0.682 | 0.724 |
jedit-4.2 | 0.757 | 0.674 | 0.636 | 0.759 | 0.743 | 0.73 | 0.673 | 0.686 | 0.725 |
arc | 0.558 | 0.604 | 0.538 | 0.649 | 0.501 | 0.647 | 0.581 | 0.506 | 0.492 |
synapse-1.0 | 0.741 | 0.631 | 0.647 | 0.749 | 0.666 | 0.678 | 0.711 | 0.721 | 0.753 |
tomcat | 0.735 | 0.639 | 0.723 | 0.857 | 0.776 | 0.786 | 0.604 | 0.746 | 0.777 |
camel-1.0 | 0.635 | 0.75 | 0.686 | 0.521 | 0.781 | 0.582 | 0.598 | 0.737 | 0.778 |
Average | 0.69 | 0.659 | 0.655 | 0.687 | 0.661 | 0.676 | 0.652 | 0.67 | 0.696 |
Rank | 3.933 | 6 | 6.1 | 4.2 | 5.433 | 4.733 | 5.8 | 4.933 | 3.867 |
Metrics | Total | LIMCR | SMOE | IHT |
---|---|---|---|---|
Balancedscore | 0.024 | 0.011 | 0.165 | 0.051 |
G-mean | 0.123 | 0.085 | 0.154 | 0.07 |
Dataset | 4 | 8 | 12 | 16 | 20 |
---|---|---|---|---|---|
synapse-1.2 | 0.642 | 0.649 | 0.638 | 0.659 | 0.68 |
jedit-3.2 | 0.659 | 0.738 | 0.762 | 0.741 | 0.772 |
synapse-1.1 | 0.637 | 0.661 | 0.661 | 0.623 | 0.622 |
log4j-1.0 | 0.643 | 0.649 | 0.673 | 0.542 | 0.577 |
jedit-4.0 | 0.571 | 0.571 | 0.579 | 0.621 | 0.657 |
ant-1.7 | 0.716 | 0.768 | 0.773 | 0.761 | 0.767 |
camel-1.6 | 0.531 | 0.539 | 0.562 | 0.569 | 0.568 |
camel-1.4 | 0.518 | 0.564 | 0.587 | 0.622 | 0.63 |
Xerces-1.3 | 0.607 | 0.609 | 0.692 | 0.674 | 0.675 |
Xalan-2.4 | 0.588 | 0.589 | 0.619 | 0.686 | 0.661 |
jedit-4.2 | 0.616 | 0.639 | 0.685 | 0.683 | 0.726 |
arc | 0.699 | 0.693 | 0.646 | 0.631 | 0.59 |
synapse-1.0 | 0.922 | 0.822 | 0.853 | 0.707 | 0.707 |
tomcat | 0.614 | 0.621 | 0.64 | 0.666 | 0.704 |
camel-1.0 | 0.576 | 0.537 | 0.523 | 0.745 | 0.559 |
Average | 0.636 | 0.643 | 0.66 | 0.662 | 0.66 |
Rank | 3.9 | 3.333 | 2.567 | 2.767 | 2.433 |
Dataset | 4 | 8 | 12 | 16 | 20 |
---|---|---|---|---|---|
synapse-1.2 | 0.59 | 0.606 | 0.623 | 0.646 | 0.673 |
jedit-3.2 | 0.593 | 0.719 | 0.758 | 0.736 | 0.771 |
synapse-1.1 | 0.552 | 0.607 | 0.654 | 0.584 | 0.607 |
log4j-1.0 | 0.563 | 0.606 | 0.622 | 0.456 | 0.476 |
jedit-4.0 | 0.449 | 0.449 | 0.514 | 0.582 | 0.638 |
ant-1.7 | 0.69 | 0.762 | 0.772 | 0.761 | 0.767 |
camel-1.6 | 0.314 | 0.354 | 0.467 | 0.45 | 0.449 |
camel-1.4 | 0.27 | 0.415 | 0.505 | 0.622 | 0.626 |
Xerces-1.3 | 0.515 | 0.537 | 0.664 | 0.64 | 0.675 |
Xalan-2.4 | 0.477 | 0.507 | 0.56 | 0.68 | 0.638 |
jedit-4.2 | 0.512 | 0.553 | 0.627 | 0.644 | 0.69 |
arc | 0.651 | 0.647 | 0.614 | 0.626 | 0.589 |
synapse-1.0 | 0.919 | 0.822 | 0.841 | 0.643 | 0.643 |
tomcat | 0.508 | 0.536 | 0.587 | 0.658 | 0.698 |
camel-1.0 | 0.405 | 0.389 | 0.523 | 0.741 | 0.487 |
Average | 0.534 | 0.567 | 0.622 | 0.631 | 0.628 |
Rank | 4.233 | 3.6 | 2.267 | 2.7 | 2.2 |
Metric | Balancedscore | G-Mean |
---|---|---|
p-value | 0.054 | <0.001 |
Datasets | ILMCR+GNB | ILMCR+DTC | ILMCR+ABC | IHT+GNB | IHT+DTC | IHT+ABC |
---|---|---|---|---|---|---|
JM1 | 0.562 | 0.515 | 0.522 | 0.615 | 0.64 | 0.612 |
KC1 | 0.631 | 0.634 | 0.617 | 0.628 | 0.62 | 0.647 |
MC1 | 0.655 | 0.536 | 0.57 | 0.697 | 0.563 | 0.617 |
PC3 | 0.486 | 0.53 | 0.538 | 0.718 | 0.755 | 0.741 |
PC4 | 0.577 | 0.717 | 0.759 | 0.65 | 0.826 | 0.799 |
PC5 | 0.554 | 0.556 | 0.595 | 0.623 | 0.679 | 0.669 |
prop-1 | 0.612 | 0.652 | 0.626 | 0.63 | 0.69 | 0.692 |
prop-2 | 0.593 | 0.539 | 0.53 | 0.595 | 0.573 | 0.7 |
prop-3 | 0.539 | 0.589 | 0.542 | 0.58 | 0.64 | 0.665 |
prop-4 | 0.606 | 0.607 | 0.597 | 0.632 | 0.691 | 0.704 |
prop-5 | 0.544 | 0.56 | 0.551 | 0.605 | 0.635 | 0.681 |
ec-2.0 | 0.694 | 0.624 | 0.683 | 0.674 | 0.686 | 0.685 |
ec-2.1 | 0.643 | 0.628 | 0.651 | 0.683 | 0.677 | 0.659 |
ec-3.0 | 0.679 | 0.638 | 0.648 | 0.672 | 0.65 | 0.651 |
Average | 0.598 | 0.595 | 0.602 | 0.643 | 0.666 | 0.68 |
Rank | 4.286 | 4.643 | 4.714 | 3 | 2.429 | 1.929 |
Datasets | ILMCR+GNB | ILMCR+DTC | ILMCR+ABC | IHT+GNB | IHT+DTC | IHT+ABC |
---|---|---|---|---|---|---|
JM1 | 0.398 | 0.187 | 0.231 | 0.559 | 0.628 | 0.596 |
KC1 | 0.583 | 0.569 | 0.534 | 0.619 | 0.609 | 0.634 |
MC1 | 0.654 | 0.277 | 0.389 | 0.668 | 0.375 | 0.521 |
PC3 | 0.207 | 0.27 | 0.35 | 0.713 | 0.744 | 0.724 |
PC4 | 0.483 | 0.704 | 0.759 | 0.647 | 0.815 | 0.773 |
PC5 | 0.366 | 0.36 | 0.534 | 0.59 | 0.65 | 0.645 |
prop-1 | 0.573 | 0.617 | 0.588 | 0.613 | 0.687 | 0.69 |
prop-2 | 0.506 | 0.307 | 0.516 | 0.546 | 0.452 | 0.697 |
prop-3 | 0.466 | 0.576 | 0.511 | 0.514 | 0.639 | 0.663 |
prop-4 | 0.559 | 0.501 | 0.554 | 0.601 | 0.689 | 0.703 |
prop-5 | 0.396 | 0.558 | 0.546 | 0.575 | 0.633 | 0.66 |
ec-2.0 | 0.683 | 0.62 | 0.674 | 0.641 | 0.651 | 0.642 |
ec-2.1 | 0.62 | 0.628 | 0.648 | 0.672 | 0.635 | 0.6 |
ec-3.0 | 0.662 | 0.638 | 0.643 | 0.64 | 0.599 | 0.597 |
Average | 0.511 | 0.487 | 0.534 | 0.614 | 0.629 | 0.653 |
Rank | 4.286 | 4.857 | 3.929 | 3 | 2.571 | 2.357 |
Publisher’s Note: MDPI stays neutral with regard to jurisdictional claims in published maps and institutional affiliations. |
© 2020 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (http://creativecommons.org/licenses/by/4.0/).
Share and Cite
Wu, Y.; Yao, J.; Chang, S.; Liu, B. LIMCR: Less-Informative Majorities Cleaning Rule Based on Naïve Bayes for Imbalance Learning in Software Defect Prediction. Appl. Sci. 2020, 10, 8324. https://doi.org/10.3390/app10238324
Wu Y, Yao J, Chang S, Liu B. LIMCR: Less-Informative Majorities Cleaning Rule Based on Naïve Bayes for Imbalance Learning in Software Defect Prediction. Applied Sciences. 2020; 10(23):8324. https://doi.org/10.3390/app10238324
Chicago/Turabian StyleWu, Yumei, Jingxiu Yao, Shuo Chang, and Bin Liu. 2020. "LIMCR: Less-Informative Majorities Cleaning Rule Based on Naïve Bayes for Imbalance Learning in Software Defect Prediction" Applied Sciences 10, no. 23: 8324. https://doi.org/10.3390/app10238324
APA StyleWu, Y., Yao, J., Chang, S., & Liu, B. (2020). LIMCR: Less-Informative Majorities Cleaning Rule Based on Naïve Bayes for Imbalance Learning in Software Defect Prediction. Applied Sciences, 10(23), 8324. https://doi.org/10.3390/app10238324