
一般的な機械学習モデリングにおいて特徴量の数の限定は、モデルの堅牢性(robustness)を高める効果が期待されます。ここで特に初学者においては、最適な特徴量数をシステマティックに決定したくなるようですが、経験を重ねれば特徴量の数自体はそこまで感度の高い重要なパラメータじゃないと感じるようになると思います。
もちろん、これは経験則であり感覚ですから科学的な法則のようなものではありません。しかしなぜそう思うのかというと、変数の重要度(feature importance)や回帰係数の大きさをプロジェクトの度に観察し続ければ、せいぜいトップ10くらいの変数で重要度の総和の8割以上を持っているケースが大半だからです。ちなみにトップ5変数を除いても精度があまり変わらず別のトップ5変数が現れるということもあったりします(これがモデリング的に良いとは言っていません)。
つまり、メカニズム的に必要最小の因子でモデル化されているというよりは、類似変数クラスの中から偶然のゆらぎの中で選ばれた代表因子が重要度を持ちやすいという感じです。なので広く代表因子が都度選ばれれば(予測はそれでも)いいので、無理に特徴量数を合理化せず、気持ち多めに50~100個程度の特徴量を残せばまぁ良いだろうとなるし、その数を45個にするとか28個にするなどというのは、偶然のゆらぎの中でただ最適化している気分に浸っているだけなので無駄かなと感じるのです。
特徴量選択にも色々あるので工夫し続けて欲しいとは思いますが、特徴量選択のベースライン的アプローチはsklearnのRFE(Recursive Feature Elimination)だと思います。これはステップワイズの変数減少法の機械学習版だと思って下さい。重回帰分析時のようにF値(変数削除前の残差平均平方に対する変数削除後の残差平方和の増加分の比率)が2.0より小さければ削除を許可するといった理屈もなくもっと力技ですが、予測モデリングはこれで十分でしょう。これはRFEの引数n_features_to_selectを50~100と設定すれば終わりです。
MLモデリングは、計量経済学に見られる実証分析のような目的では行われないこと、ツリー系などノンパラへはパラメトリックなモデリング時の高尚な理屈はそもそも流用できないこと、所詮は予測タスクといった温度感が伝われば良いかなと思います。