[解析例] エルピオでんきがサ終したから最安電気事業者をデータ分析で比較してみた – 東電管内最安事業者

R解析例

ーーそのメールは3月28日夜 19:36に突然届いた。

まだ乗り換えてから三ヶ月しか経ってないのに・😥😥そうはいっても仕方がありません。なんでも、現在の ロシア・ウクライナ情勢を受けて新規申し込みの受付を停止している事業者は全国で20社にも及ぶとの報道もあり、 エルピオでんきに限ったリスクでも無いようです。

なんでも対応を迫られた顧客は14万世帯、メール直後はエルピオでんきも提携先の事業者もサーバーダウンで 明らかな混乱が見て取れました。

私がエルピオでんきに乗り換えたのはどう考えても電気料金が安くなるという確信があったためです。それくらいエルピオでんきは とても安い料金体系でした。たった三ヶ月だけでも、実際1割近いコストダウンを実現することができたので文句はないのですが、さて次はどうしたものか・・・
実のところ、前回調べた時は真面目に計算をしていなかったのですが、この際本職のデータ解析スキルを活かして料金体系の分析により最安電気小売り事業者を探索することにしました

調べてみたところ、「これ、もしかしたらブログとかに書いちゃいけない闇なのか?」という明らかな差を見つけてしまいましたので、実際の会社名も出しつつ紹介したいと思います

Snitch
Snitch

こんな弱小ブログなら怒られることもあるまい・・・!

結論だけ知りたい人 – 私はENEOSでんきに乗り換えました

我が家は30A契約、月に350kWh程度使用しています。4人以上の家族がいらっしゃる世帯などでは若干結果が異なる可能性がある点、ご承知おきください。でも多分結果は代替同じだと思います。

比較解析の結果、以下の3点が重要であることが分かりました。

  • ①基本料金あり・使用量に応じた3段階課金と②基本料金なし・従量課金の2パターンがあり、ほとんどの場合①の方が安い
  • どこも料金体系に大差は無い(というか完全に同額であることが多い)
  • キャンペーン価格が決め手になる

これらの条件を満たす事業者として、ENEOSでんきが最もお得と私は判断しました。

他のおすすめ事業者 & おすすめの探し方

電気事業者を比較できるサイトはいくつかありますが、エネチェンジは割とわかりやすい印象で、参考にさせていただきました。よくあるアフィリエイトブログっぽい見た目ですが、登録~申請までのフローが非常に簡単で好印象でした。調べてみたところマザーズ上場企業とのことで、ちゃんとした会社であるのは間違いないと思って良いでしょう😀
またエルピオでんきユーザーはエネチェンジで乗り換えると、Amazonギフトカード2000円分をもらえるそうです。今エルピオユーザーを獲得しようと各社躍起になっているようなので、とにかくキャンペーンには大注目です

エネチェンジの比較ページはこちら

先ほども書きましたが、基本料金ありの料金体系であれば長期的な差はほぼありません。ただし、キャンペーンの相性次第では以下もオススメできます。(※数多の事業者の中から一部の有名企業しかしらべられていません)

出光興産
目玉はガソリンの割引です。自動車をよく運転される方なら結構アリだと思いました!私はそこまで車に乗らないため見送りました。

ソフトバンクでんき
価格は申し分ありません。携帯電話がソフトバンクの回線を使用しているか、ソフトバンク光を利用していれば割引の恩恵があります。私はUQと楽天の回線を使っていますので、残念ながらソフトバンクの恩恵を受けることはできませんでした。

ENEOSでんき
最後に私が選んだENEOSでんきです。価格は安い部類で、今実施中のキャンペーン「二年とく割」で向こう二年間安くなるみたいです。また、楽天カードの支払いを設定すると楽天ポイントが1.5倍付与される点も地味に嬉しい。実はENEOSでんきの前に、別の事業者に申し込んでいたのですが、そちらとは違って受付受理メールの連絡が非常に迅速(30分くらい?)だったのもとても好感が持てました。

調査の方法

さて、宣伝はこのあたりにいたしまして・・・w 一応当サイトは技術ブログなので、どうやって解析したのかがメインのコンテンツです。今回の解析で用いたコードは大急ぎで書いたものなのでちょっと質は良くないですが、良かったら参考にしてみてください!

概要

まず、簡単な数式を作ることを考えてみます。

基本料金なし・従量課金を謳ったプランの場合、最初から最後まで使用電力×単価が電気代になります。 以下のようにして数式を返す関数を作ってみました。

# 1 kWhあたりの価格(coef)を指定して関数を作成する関数
create_linear_model <- function(coef) {
    function(x){return(x*coef)}
}

# 使うときは以下のようにする
## モデルの作成(係数26.4円)
model_one_denki <- create_linear_model(26.4)

次に、段階型の料金体系の場合です。各社のプランを調べてみたところ、「**kWhまではいくら」という 区切り方は同じであり、全て①~120kWh/②120~300kWh/③300kWh~という分け方のようでした。そこで、段階型は以下のような条件分岐でRコードに落とし込むことにしました。

# 段階型料金体系の場合
# 0~120kWh, 121~300kWh, 300~kWhで条件分岐する
create_step_model <- function(price_0_120, price_120_300, price_300_,basic_cost) {
    function(A) {
      if_else(A <= 120, A * price_0_120 + basic_cost,
              if_else(A > 120 & A <= 300, 120 * price_0_120 + (A-120) * price_120_300 + basic_cost,
                      120 * price_0_120 + 180*price_120_300 + (A-300) * price_300_ + basic_cost
                      )
      )
    } %>% 
        return()
}

通常のif() else if()文を使用して書くこともできましたが、if_else()を使うことでベクトル計算に対応(Vectorized)させることができます。 関数の使い方をイメージしてみるとその方が扱いやすそうでしたので、こうした設計にしてみました。

Vectorizeとは
ベクトルを与えると一個一個の値を計算して、再度ベクトルの状態で結果が返ってくる関数のことを言います。(例:1:100 * 10の結果が10, 20, 30, …, 1000となる
一般的にVectorizeされた数値計算はfor文などを使用するよりも高速である、というメリットがあります。

各社のモデルをかたっぱしから作成、料金体系を確認するグラフを描く

ここで使用した料金のデータは、価格.comの情報を使用しました。 情報収集が煩雑になる気配がしたので、Webから自動で数値を取得する(webスクレイピング)する コードを書いたのですが、結論としては手打ちした方が速そうだったのでこれは割愛します。

model_tokyo_e <- create_step_model(19.88, 26.48, 30.57, 858)
model_elpio <- create_step_model(21.14, 23.03, 25.78, 858)
model_softbank <- create_step_model(19.68, 25.68, 29.04, 858)
model_cosmo <- create_step_model(19.88, 26.46, 30.57, 858)
model_eneos <- create_step_model(19.88, 24.54, 26.22, 858)
model_nature <- create_linear_model(26.40)
model_loop <- create_linear_model(26.40)
model_one <- create_linear_model(26.40)

段階型料金体系を図示してみる

よくある段階型の料金体系の図を描いてみます。

今回は計算チェックの意味合いも含め、回りくどいですが、作成したモデルを使って料金を改めて算出してみます。 つまり、(2kWhの料金-1kWhの料金) = その区間での単価 という計算ができることを利用します。

# 検算用関数
calc_price_model <- function(func, start, end) {
  tmp <- func(2) - func(1)
  for (i in (start + 1):end) {
    tmp <- c(tmp, func(i + 1) - func(i))
  }

  tibble(range = start:end, unit_price = tmp) %>%
    return()
}

この検算用関数を使って料金図を作るとこうなります。グラフはggplot2を使っています。ラベルは{ggrepel}というパッケージを、色分けには{ggsci}というパッケージを使用しました。これらは私も多用するパッケージですので、いずれ紹介したいと思います♪

tibble(calc_price_model(model_tokyo_e, 1, 450), grp = "東京電力") %>%
  bind_rows(tibble(calc_price_model(model_elpio, 1, 450), grp = "エルピオでんき")) %>%
  bind_rows(tibble(calc_price_model(model_softbank, 1, 450), grp = "ソフトバンクでんき")) %>%
  bind_rows(tibble(calc_price_model(model_cosmo, 1, 450), grp = "コスモでんき")) %>%
  bind_rows(tibble(calc_price_model(model_eneos, 1, 450), grp = "エネオスでんき")) %>%
  mutate(label = if_else(range %in% c(50, 200, 350), grp, NA_character_)) %>%
  ggplot(aes(x = range, y = unit_price, col = grp)) +
  geom_line() +
  ggrepel::geom_text_repel(aes(label = label),
    nudge_x = 30,
    hjust = "outward",
    na.rm = TRUE
  ) +
  theme_bw() +
  ggsci::scale_color_aaas(name = "")

ふむふむ、確かにそれらしい結果となりましたね。これを見ると、東京電力の料金は他社よりも若干高いような気がします。しかし、この料金体系の差は累積額だとどれくらいになるのでしょうか・・・?
結果はこの後すぐ!

100kWh~350kWh使用時の電気代(期間限定公開)

⚠注意⚠
この先の計算価格は2022年3月30日時点での情報をもとにしています。しばらくしたら値段は変わり得ます。金額が変更になったとしても、当サイトは一切の責任を負いませんのでご注意ください。税込み価格を計算していますが、燃料調整費および再エネ賦課金(事業者にかかわらず一律でかかる費用)は省いています。そのため実際に支払うであろう金額はこれよりも高額になります

RANGE <- 100:350

tibble(Amp = RANGE, Price = model_elpio(RANGE) * 1.1, grp = "エルピオでんき") %>%
  bind_rows(tibble(Amp = RANGE, Price = model_tokyo_e(RANGE) * 1.1, grp = "東京電力")) %>%
  bind_rows(tibble(Amp = RANGE, Price = model_softbank(RANGE) * 1.1, grp = "ソフトバンクでんき")) %>%
  bind_rows(tibble(Amp = RANGE, Price = model_one(RANGE) * 1.1, grp = "oneでんき")) %>%
  bind_rows(tibble(Amp = RANGE, Price = model_cosmo(RANGE) * 1.1, grp = "コスモでんき")) %>%
  bind_rows(tibble(Amp = RANGE, Price = model_loop(RANGE) * 1.1, grp = "looopでんき")) %>%
  bind_rows(tibble(Amp = RANGE, Price = model_eneos(RANGE) * 1.1, grp = "エネオスでんき")) %>%
  mutate(label = if_else(Amp == max(Amp),
    grp, NA_character_
  )) %>%
  ggplot(aes(x = Amp, y = Price, col = grp)) +
  geom_line() +
  ggsci::scale_color_aaas(name = "") +
  xlim(c(200, 500)) +
  ylim(c(5000, 11000)) +
  theme_bw() +
  labs(x = "使用電力(kWh)", y = "電気代(税込、再エネ賦課金抜)") +
  ggrepel::geom_text_repel(aes(label = label),
    nudge_x = 30,
    hjust = "outward",
    na.rm = TRUE
  ) +
  ggtitle("
※2022年3月時点での価格です!価格は常に変動するため、
このデータとは異なる可能性があります!\n
※事業者に関係なく同額である燃料調整費および再エネ賦課金は
省いています!実際の支払額はそれらの分高額になり得ます!\n")

さて、このような結果になりました。ちょっと見にくい結果ですので、350kWh時点での価格を切り出してみます。

各社と比較して東京電力が最も高額、というのは間違いないようです。中でもエルピオでんきはずば抜けて安かったということがわかります😭今までありがとう・・・エルピオさん・・・
そして、私が選んだエネオスでんきは多少ではありますが、安い方ですね。
しかし、料金差はせいぜい月500円程度。ONEでんきですと20000円キャッシュバックがありますし、このくらいの差は簡単にポイントで取り返すことができます。これが、ポイントで選んでOKとした根拠です

今回解析例に用いた350kWhという値は私的には「かなり使いすぎてしまった時」で、一般の方はもう少し使用量は少ないのではないでしょうか。そうなってくると、今回おおよそ500円くらいの差しかないと言った差額はもっと小さくなるかもしれませんね!(※燃料調整費等もお忘れ無く)

(まとめ)コピペで動かすコード

今回は30A契約の想定で、料金価格設定を行いました。もしもご自身のご家庭でも試してみたい方のために、コピペで動くコードも載せておきますね♪

準備編

# 準備編(そのまま書き換えず、コピペします)
# ライブラリ読み込み
pacman::p_load(tidyverse)

# モデル関数①
create_step_model <- function(price_0_120, price_120_300, price_300_, basic_cost) {
  function(A) {{
    if_else(A <= 120, A * price_0_120 + basic_cost,
      if_else(A > 120 & A <= 300, 120 * price_0_120 + (A - 120) * price_120_300 + basic_cost,
        120 * price_0_120 + 180 * price_120_300 + (A - 300) * price_300_ + basic_cost
      )
    )
  } %>%
    return()    }
}

# モデル関数②
create_linear_model <- function(coef) {
  function(x) {
    return(x * coef)
  }
}

価格コムで調べた情報を入力する編

# 段階版のモデルを作る
# (アンダースコアを-120kWhの単価, 120-300kWhの単価, 300kWh-の単価, 基本料金に置き換える)
model_step_1 <- create_step_model( _, _, _, _)
model_step_2 <- create_step_model( _, _, _, _)

# 線形版のモデルを作る
# 必要に応じてモデルを増やしてください
model_linear_1 <- create_linear_model(_)

グラフ作成編

# 計算する価格帯
RANGE <- 100:350

# データ作成
tibble(Amp = RANGE, Price = model_step_1 * 1.1, grp = "会社1") %>%
  bind_rows(tibble(Amp = RANGE, Price = model_step_2 * 1.1, grp = "会社2")) %>%
  bind_rows(tibble(Amp = RANGE, Price = model_line_1 * 1.1, grp = "会社3")) %>%
  mutate(label = if_else(Amp == max(Amp),
    grp, NA_character_
  )) %>%
  ggplot(aes(x = Amp, y = Price, col = grp)) +
  geom_line() +
  ggsci::scale_color_aaas(name = "") +
  # 以下のxlim, ylimはグラフ描画範囲を変更するパラメータです。
  # 行頭の#を削除して、数字をいじってみてください!(下限,上限)
  # xlim(c(200, 500)) +
  # ylim(c(5000, 11000)) +
  theme_bw() +
  labs(x = "使用電力(kWh)", y = "電気代(税込)") +
  ggrepel::geom_text_repel(aes(label = label),
    nudge_x = 30,
    hjust = "outward",
    na.rm = TRUE
  ) 

さいごに

ということで、今回はエルピオでんきがサ終してしまったため急遽各社の電気料金を比較してみた、という企画をお送りしました!解析例紹介の一発目がこの話題になるとは思いませんでしたが・・・

それではまた!

コメント

タイトルとURLをコピーしました