Python

【Python】三井住友プラチナプリファードとゴールドの損益分岐点を計算するコード

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。

2024年3月22日に衝撃的なニュースが飛び込んできました。

三井住友プラチナプリファードの大大大改悪です(笑)。

Xはパニックとなっており、ほとんどの人がネガティブな反応をしています。

今回はクレジットカードを指定することで付与されるポイントと年会費とを考慮し、実質的なカード利用による利益計算を行う関数をPythonコードで作成しました。

情報を脊髄反射的に反応するのではなく、冷静に計算をして、損益分岐点を冷静に判断しましょう。という気持ちを込めて作りました。

クレカ改悪ニュース概要

先ず前提となるクレジットカードの改悪ニュースを簡単にまとめます。

2024年3月23日にSBI証券からクレジットカード積立に関する発表が、公式ページ上にアップロードされました。

背景としては

NISA制度の改正による月々の投資金額の上限拡大、また、それに合わせたクレジットカードを介した投資信託の購入上限の拡大です。

今までは月5万円までがクレジットカードでの購入(クレカ積立)の上限でしたが、2024年3月より随時10万円に拡大しました(証券会社によって時期は若干異なります)。

SBI証券も5万円から10万円への拡大に対応したのですが、その対応内容が現制度を大幅に改悪した内容でした。

以下が内容です。

簡単にまとめると

  • 2024年5月からクレカ積立上限を5万⇒10万円に拡大
  • 今まではクレカ積立還元率は固定だったが
    新制度ではカード利用額により利率を変動させる
  • 特にひどい改悪だったのが三井住友プラチナプリファードの改悪
  • 固定5%⇒利用額500万円以上で3%を最大とし、300万円以上で2%、それ未満で1%

プラチナプリファードのこれまでのメリットであったクレカ積立の高還元率を捨てて、さらに利用額の(それも高額の)縛りを課せるようになりました。

クレジットカードの損益計算

カードスペック

前置きが長くなりましたが、改悪したとはいえ、カードの獲得ポイントがかなり複雑になったこともあり、一目でどれくらいポイントがもらえるか非常にわかりにくい制度となりました。

ここでカードスペックを比較します。

項目プラチナプリファードゴールドカード
通常の還元率1%0.5%
年会費33,000円5,500円
(年100万円利用達成で永年無料)
クレカ積立還元率
()はカード利用額
1% (300万円未満)
2% (300万円以上)
3% (500万円以上)
0% (10万未満)
0.75%(10万以上)
1%(100万以上)
ボーナスポイント100万円毎に10,000ポイント
(最大400万円まで)
100万円達成時のみ
10,000ポイント

このスペックに対し、カードを通常利用しながら、クレカ積立を行った場合、利用額でどれくらいポイントがもらえるかプログラミングで計算してみようと思います。

コード

import pandas as pd

def calculate_creditcard_benefit_incl_fee(card,investment=600000):
    """
    カードの利用による還元ポイントを計算します。
    通常の還元によるポイントと100万円毎に追加されるボーナスポイント、クレカ積立のポイントの総合計です。
    プラチナプリファードとゴールドのパラメーターの違いを反映して計算します。

    Parameters:
    card (str): カード種類 platinum_preferred,goldの二択
    investment (int): クレカ積立の年額。デフォルトは60万円。

    Returns:
    DataFrame: 年間カード利用額に応じた通常還元ポイント、積立還元ポイント、ボーナスポイント、総還元ポイント、
                実質利用額ポイント(年会費込み)を含むデータフレーム。
    """
    annual_card_use_range = range(100000, 6000001, 100000)  # 10万円刻みで600万円まで
    if card == "platinum_preferred":
        nomal_rate = 0.01
        annual_fee = 33000
    elif card == "gold":
        nomal_rate = 0.005
        annual_fee = 0

    results = []
    for amount in annual_card_use_range:
        normal_bonus_points = amount * nomal_rate
        creditcard_investment_points = calculate_creditcard_investment(card,amount,investment)  # 積立による還元
        additional_bonus_points = calculate_bonus_points(amount,card)  # 追加のボーナスポイント
        total_points = normal_bonus_points + creditcard_investment_points + additional_bonus_points
        benefit_incl_fee = total_points - annual_fee
        results.append({
            "card_amount": amount,
            "normal_bonus_points": normal_bonus_points,
            "creditcard_investment_points": creditcard_investment_points,
            "additional_bonus_points": additional_bonus_points,
            "total_points": total_points,
            "benefit_incl_fee": benefit_incl_fee
        })

    # 結果をDataFrameに変換
    df = pd.DataFrame(results)
    return df



# 積立還元率の計算修正
def calculate_creditcard_investment(card,amount,investment):
    if card == "platinum_preferred":
        if amount < 3000000:
            bonus_rate = 0.01
        elif amount < 5000000:
            bonus_rate = 0.02
        else:
            bonus_rate = 0.03
        return investment * bonus_rate

    elif card == "gold":
        if amount < 100000:
            bonus_rate = 0.00
        elif amount < 1000000:
            bonus_rate = 0.0075
        else:
            bonus_rate = 0.01
        return investment * bonus_rate
    

# ボーナスポイントの計算
def calculate_bonus_points(amount,card):
    if card == "platinum_preferred":
        bonus_points = min((amount // 1000000) * 10000, 40000)
        return bonus_points
    elif card == "gold":
        bonus_points = 10000 if amount >= 1000000 else 0
        return bonus_points

ざっくりコードの説明をします。

コードは関数で作っており、三種類あります。

メインのコードがcalculate_creditcard_benefit_incl_feeで
その名の通り、クレジットカードで獲得できるポイントに対し、年会費を差し引くことで利益を計算するコードです。

引数は
card
investment
の二つです。

cardはクレジットカードの種類を文字列で指定し、
プラチナプリファードは”platinum_preferred”
ゴールドは”gold”
です。

investmentは
投資金額の設定です。
デフォルト値は60万円、つまり、月5万円のクレカ積立をした場合のポイント収支を計算します。

戻り値はdfで、利用額10万円刻みでポイント収支を計算し、表形式で返してくれます。

上記のスペックを見ていただけるとわかると思いますが、
クレカ積立の還元率と追加ボーナスの計算が少し面倒なので、別のサブ関数を作って計算させました。

一つ目のサブ関数がcalculate_creditcard_investmentでクレカ積立の利益率を選び、投資金額からポイントを返す関数です。

二つ目の関数がcalculate_bonus_pointsで追加ボーナスのポイントを返してくれます。

使い方

実際に使ってみます。

プラチナプリファードのポイントを計算してみます。
とりあえず、クレカ積立額は年間60万円(月5万円)でやってみます。

df_platinum_preferred = calculate_creditcard_benefit_incl_fee("platinum_preferred")

こんな感じで計算できました。

表の説明をすると、左から年間のカード利用額、通常のポイント、クレカ積立のポイント、100万円毎の追加ボーナス、トータルポイント、年会費を加味した実質の利益です。

見ていただけるとわかりますが、まあひどいですね(笑)

ちなみに収支が0になるのが170万円でした。

続いてゴールドカードの計算をしてみます。

df_gold = calculate_creditcard_benefit_incl_fee("gold")

列は上記と同じなので説明は省略します。

こちらは年会費が一度100万円利用したものとしているので0円で計算しています。

気持ちがいいですね。ちゃんと利益が出ています。

プラチナプリファードとゴールドの比較表

比較するコード

上記の関数を使ってプラチナプリファードとゴールドの差分を計算してみようと思います。

# プラチナプリファードとゴールドのdfを作成し、マージ

# プラチナプリファード
df_platinum_preferred = calculate_creditcard_benefit_incl_fee("platinum_preferred")
df_platinum_preferred=df_platinum_preferred[["card_amount","benefit_incl_fee"]]
df_platinum_preferred.columns = ["card_amount","platinum_preferred"]

# ゴールド
df_gold = calculate_creditcard_benefit_incl_fee("gold")
df_gold = df_gold[["card_amount","benefit_incl_fee"]]
df_gold.columns = ["card_amount","gold"]

# マージし、差分を計算
df=pd.merge(df_platinum_preferred,df_gold,on="card_amount")
df["dif"] = df["platinum_preferred"] - df["gold"]

print(df)

# csvに出力
df.to_csv("../credit_card.csv",encoding="utf-8-sig",index=False)

こんな感じですね。

損益分岐点公開

ただ、プラチナプリファードとゴールドの損益だけ知りたいという方もいると思いますので、せっかくなので比較表を公開しようと思います。

カード利用料プラチナ
プリファード
獲得ポイント
(A)
ゴールド
獲得ポイント
(B)
差額
(A)-(B)
100,000-26,0005,000-31,000
500,000-22,0007,000-29,000
1,000,000-7,00021,000-28,000
1,500,000-2,00023,500-25,500
2,000,00013,00026,000-13,000
2,500,00018,00028,500-10,500
2,900,00022,00030,500-8,500
3,000,00039,00031,0008,000
3,500,00044,00033,50010,500
4,000,00059,00036,00023,000
4,500,00064,00038,50025,500
5,000,00075,00041,00034,000

プラチナプリファードがゴールドを超えるには300万円を利用しないとダメということです。

絶望的な結果ですね(笑)

プラチナプリファードはいらないこなのか?

運営側のメッセージ

プラチナプリファードは使い物にならないカードということなのでしょうか。

私も最初そう感じていました。正直なところ怒りさえ湧いてきました。

ただ、条件の表を見ていたり、プラチナプリファードの制度を眺めていると運営の思いのようなものをふと感じる瞬間がありました。

おそらく運営は三井住友カードを普段からよく使ってほしいのだと思います。

もちろん、営利の目的でだと思いますが、普段からよく使うことでプラチナプリファードはその本領を発揮してくれるように設計を立てているように感じます。

プラチナプリファードの真価は普段使い

ただ、クレカ積立だけでは年会費をペイさせない。という運営からの強い意志を感じます。

プラチナプリファードはクレカ積立専用のカードではないぞ。ということでしょう。

プラチナプリファードの本領は普段から使わないと発揮しません。
それがプリファードストア(特約店)の存在です

コンビニ、ファミレス、ふるさと納税サイト、ホテル予約などで大幅ポイント還元率アップを提供しています。

お店がたくさんあるので載せきれないですが、一部、コンビニのポイント還元率をご紹介します。

通常の還元率を加えて7%のポイント還元率です。
コンビニでこれってすごくないですか?

他にもファミレスもマニアックな店ではなく、全国どこにでもあるようなお店で高還元を提供しています。

この普段使いを計算に入れると結果は全然異なります。

ほんとはPythonに組み込みたかったのですが、数が膨大で(めんどくさかったので)エクセルでざっくり計算してみました。

これ、実は私の支出体系をベースに作ったモデルケースです。

ざっくり年間約160万円利用で、クレカ積立を年間60万円行ってみた結果です。

なんとゴールドよりも15,000ポイントお得になっていました。

プリファードストアの存在を無視すると高額の利用額がないと元は取れませんが、
うまく活用すると半額の利用料で、結構しっかりお得になることがわかりました。

ちなみに損益分岐点は120万円台くらいです(上記のモデルで比率をそのままに利用額を下げていった結果です。ただし、投資金額は60万のまま)

これをどう感じるかは人それぞれですが、私は使い方をフィットさせれば、全然いらないことは思いませんでした。

ただ、改悪であることは間違いないです。
せめて現行の制度は維持しつつ、5万円以上の拡大分には厳しい利率にする、くらいなら納得する人もいたでしょうが。

プラチナプリファードとゴールド、どっちがいいか?

さて、損益分岐点を見てきました。実際にはどちらを利用するべきでしょうか。

ここでゴールドの仕様変更について考察したいと思います。

ゴールドは年間100万以上の利用であればクレカ積立還元率1%となり、また、ボーナスとして10,000ポイント付与されます。

一気にお得度が変わりますね。

私の「運営は普段使いしてほしいと思っている」という仮説を裏付ける内容です。

運営側から見るとゴールド100万円利用措置は温情をかけたと見れなくもないです。

年間100万円の利用は必要ですが、年100万円つかえば、今までと同じ仕様で10万円までクレカ積立ができるわけですから。

もともとゴールドは普段使い100万円利用で実質1.5%の高還元率カードなのである程度の利用は必要なカードです。

そう考えると100万円利用するゴールド持ちは今回ノーダメージどころか改善ということになります。

一方でプラチナプリファードはうまく制度を使わない限り、年会費の回収もままならない結果です。これは改悪といわれても仕方がないです。

ただ、見てきたように、コンビニやファミレス(ファストフード含む)でふだん使いすることで160万円台の利用でもゴールドより目に見えてお得になることも事実です。

がっつり使えばプラチナプリファード、100万円の利用であればゴールドという使いわけです。

ちなみに2024年10月まではプラチナプリファードはクレカ積立5%を維持するようです。
いずれにしてもプラチナプリファード持ちは慌ててゴールドに変えたり、他社に乗り換えたりする必要はなさそうです。

どちらを選ぶかは人それぞれですね。
私はしばらくプラチナプリファードを使っていきます。

╲下記ボタンから申し込みで公式サイトよりポイントプラス╱

プラチナプリファード:10,000ポイント
ゴールド:2,000ポイント
公式サイトから申し込むよりもお得!