Detecting Refactoring Commits in Machine Learning Python Projects: A Machine Learning-Based Approach
<|reference_start|>Detecting Refactoring Commits in Machine Learning Python Projects: A Machine Learning-Based Approach: Refactoring enhances software quality without altering its functional behaviors. Understanding the refactoring activities of developers is crucial to improving software maintainability. With the increasing use of machine learning (ML) libraries and frameworks, maximizing their maintainability is crucial. Due to the data-driven nature of ML projects, they often undergo different refactoring operations (e.g., data manipulation), for which existing refactoring tools lack ML-specific detection capabilities. Furthermore, a large number of ML libraries are written in Python, which has limited tools for refactoring detection. PyRef, a rule-based and state-of-the-art tool for Python refactoring detection, can identify 11 types of refactoring operations. In comparison, Rminer can detect 99 types of refactoring for Java projects. We introduce MLRefScanner, a prototype tool that applies machine-learning techniques to detect refactoring commits in ML Python projects. MLRefScanner identifies commits with both ML-specific and general refactoring operations. Evaluating MLRefScanner on 199 ML projects demonstrates its superior performance compared to state-of-the-art approaches, achieving an overall 94% precision and 82% recall. Combining it with PyRef further boosts performance to 95% precision and 99% recall. Our study highlights the potential of ML-driven approaches in detecting refactoring across diverse programming languages and technical domains, addressing the limitations of rule-based detection methods.<|reference_end|>
@article{noei2024detecting,
    title={Detecting Refactoring Commits in Machine Learning Python Projects: A
  Machine Learning-Based Approach},
    author={Shayan Noei, Heng Li, Ying Zou},
    journal={arXiv preprint arXiv:2404.06572},
    year={2024},
    archivePrefix={arXiv},
    eprint={2404.06572},
    primaryClass={cs.SE}
}