慣用句であるといえばそれまでのことですが、仮に at を外したらどうなるでしょうか。
* I'm not good English.
「わたしは良い英語ではない」 となりませんか? 「英語」 は言語として 「話される」 対象であり、人そのものにはなり得ません。
お示しの文の場合の at は、「得意である」 というのが、「何において得意であるのか」 ということを表すために、前置詞 at を使っています。
be good at ... という決まった表現があって、これで 「~ が得意である」 という意味を表すことになっています。
お礼
真ん中の説明がシンプルでわかりやすかったです。 ご回答有難うございました。