## 4 Methodology
### Feature Selection Methods
#### 4.1.3 Meta-Heuristic Feature Selection  
A key challenge when evaluating how different feature combinations affect model performance is the computational cost associated with these evaluations. Each unique subset of features must be used to train the model at least once, and as the number of features grows, the number of potential subsets expands exponentially. Due to their rapidly increasing runtime, traditional exhaustive or grid-search approaches become impractical in such scenarios. Sequential and Monte Carlo techniques can reduce this cost somewhat, but they still risk exploring too many unproductive states. Meta-heuristic algorithms offer a balanced exploration and exploitation strategy within fixed time and memory constraints. Rather than systematically enumerating all possibilities, they use randomness to sample from a vast search space, while methods such as mutation, crossover, or local search guide the process toward promising regions. The total computational cost often depends on the product of the number of iterations and the population size. This controlled and flexible exploration ensures that even complex feature selection problems can be tackled efficiently, leading to a near-optimal subset of features without an explosive increase in computation.  
Meta-heuristic feature selection uses general-purpose optimization algorithms to search for the best combination of features. Inspired by natural processes such as evolution or swarm behavior, it systematically explores and refines potential solutions over multiple iterations. This approach helps uncover complex interactions between features and often identifies a more effective subset than basic methods, resulting in stronger and more efficient models.  
In this study's genetic algorithm approach, each potential solution was represented by a binary chromosome, where each gene indicates whether a particular feature was included (1) or excluded (0). The algorithm aimed to maximize the model's performance, measured by the \(R^{2}\) value of a neural network-based regressor containing two fully connected layers with 64 units. The number of agents, iteration size, crossover rate, and mutation rate were set to 30, 30, 0.8, and 0.2, respectively. A penalty term proportional to the number of active features was subtracted from the \(R^{2}\) score to discourage the selection of too many features. Thus, the overall fitness function for a chromosome \(C\) can be expressed as shown in Equation (4).  
\[Fitness(C)=R^{2}(C)-\alpha\times\frac{Count(C)}{n} \tag{4}\]  
where \(R^{2}(C)\) is the coefficient of determination obtained from the neural network when trained on the selected features, \(Count(C)\) is the number of active features in chromosome \(C\), and \(\alpha\) is a weight that controls how strongly we penalize larger feature sets among the total number of \(n\) features. As the genetic algorithm iterates, it records the fitness calls, preserving a history of which feature subsets work best. These steps help reveal patterns, such as which features appear repeatedly in high-performing chromosomes, thereby guiding the identification of a reduced yet highly effective set of weather parameters.