チーム内の業務割当てをPython + PuLPで最適化
Pythonのオンライン学習サービスであるPyQの「数理的アプローチによる問題解決」という教材を少し学習してみました。
グラフ理論を実装するnetworkx
というライブラリや、PuLP
という線形最適化のライブラリなどについて学ぶことができます。具体的なコース内容はまた別の機会に紹介できればと思いますが、特にPuLP
を使うと簡単に最適化が実行できて役に立ちそうでしたので、試しに業務割当てを最適化するプログラムを作ってみました。
なお私自身はあくまで経理マンであり、プログラミングは初心者ですので、プログラムが冗長で洗練されていない点はご了承ください。お気付きの点がありましたら、ご指摘いただけると助かります。
解きたい問題は何か?
複数のタスクを複数人のメンバーで、決められた時間内に処理することを考えます。このとき、それぞれのタスクを一人で完了させてもよいし、複数人で分担してもOKとします。
ここで、各々のメンバーがそれぞれのタスクを一人で完了させる時に、どのくらいの時間を要するかを考えます。 未経験のため実施できない業務、また(過去に何度も行っているため)教育的配慮でアサインさせたくない業務などもあるでしょう。また、各々のメンバーの労働時間にも制約があります。
上記のような制約のもと、チームの総労働時間が最短となるような割り振りを考えます。
以下、具体例として、3つのタスクをA, B, Cの3人で分担することを考えます*1。各々の所要時間は以下の通りとします。たとえばAさんはTask 1が実施できず、Task 2は8時間、Task 3は6時間で一人で終わらせることができることを意味しています。
(単位:時間) | A | B | C |
---|---|---|---|
Task 1 | ― | 7 | 4 |
Task 2 | 8 | 5 | 3 |
Task 3 | 6 | ― | 2 |
労働時間の制約は以下の通りとします。Cさんはレビュアー的な立ち位置のため、基本的にはタスクを行わないという設定です。
(単位:時間) | A | B | C |
---|---|---|---|
労働時間数の上限 | 10 | 10 | 0.5 |
Python + PuLPによる実装
準備
以下、さっそくPythonで実装していきます。データ分析ライブラリとしておなじみのpandasの他、線形最適化のライブラリとしてPuLP
とortoolpy
をインポートします。
import pandas as pd from pulp import LpProblem, lpSum, value, LpStatus from ortoolpy import addvars
続いて、制約条件をpandasのDataFrameに格納します。ここではプログラム上に直接記載しますが、もちろんread_csv
を用いて、csvファイルから読み込んでもOKです。
対応できないタスクについては、十分大きな数(ここでは100)を設定することで、最適化の際に選択されないようにしています。
df = pd.DataFrame({'A': [100, 8, 6], 'B': [7, 5, 100], 'C': [4, 3, 2]}) num_of_task = len(df) # タスク数 num_of_member = len(df.columns) # メンバー数 # 各々の労働時間数の上限を設定 df_limit = pd.DataFrame({'A': [10], 'B': [10], 'C': [0.5]})
線形最適化モデルの作成
ここから、線形最適化ライブラリのPuLP
を用いて、線形最適化モデルを設定します。具体的には、モデルに目的関数と制約条件を設定します。
まず、LpProblem
で空のモデルmを作成します。線形最適化には最大化と最小化とがありますが、LpProblem
はデフォルトで目的関数を最小化するモデルが作成されるため、このままでOKです*2。
さらに、必要な変数を作成します。各々のメンバーについて、各々のタスクの分担割合を定める必要があるため、「タスク数×メンバー数」分の変数が必要になります。ここで、ortoolpy
のaddvars
を使うと、非負かつ連続変数を簡単に作れるので非常に便利です。これらの変数もpandasのDataFrameに格納しておきます。
m = LpProblem() # 何も指定しないと目的関数を最小化
df_var = pd.DataFrame(addvars(num_of_task, num_of_member))
目的関数の設定
モデルを作った後は、目的関数を設定します。"m += (目的関数)"という書き方で設定できます。ここでの目的関数は、全てのメンバーの労働時間の合計になります。
lpSum
は( )内の合計を計算できます。sum
も使えますが、lpSum
の方が高速で動作するようです。
# 目的関数 m += lpSum([df.iloc[:, i] * df_var[i] for i in range(num_of_member)])
制約条件の設定
続いて、制約条件を設定します。制約条件も同様に、"m += (制約条件)"という書き方で設定できます。目的関数も制約条件も書き方が同じなのが、少し不思議な感じがしますが、これでOKです。
制約条件は、各タスクの負担割合の合計が1(100%)になることと、各々の労働時間が上限を超えないこと、の二つです。
# 制約条件:割合は合計で100%とする for i in range(num_of_task): m += lpSum(df_var.iloc[i]) == 1 # 制約条件:各々の労働時間の上限範囲内で業務を行う for i in range(num_of_member): m += lpSum(df.iloc[:, i] * df_var[i]) <= df_limit.iloc[:, i]
作成したモデルの確認
以上で目的関数と制約条件を設定できました。正しく設定できたかどうかを確認するため、モデルmの内容を表示してみます。
print(m) # 目的関数、制約条件を表示
以下のように目的関数、制約条件、および変数が一覧で表示され、正しくモデルが作成されていることがわかります。
NoName: MINIMIZE 100*v000001 + 7*v000002 + 4*v000003 + 8*v000004 + 5*v000005 + 3*v000006 + 6*v000007 + 100*v000008 + 2*v000009 + 0 SUBJECT TO _C1: v000001 + v000002 + v000003 = 1 _C2: v000004 + v000005 + v000006 = 1 _C3: v000007 + v000008 + v000009 = 1 _C4: 100 v000001 + 8 v000004 + 6 v000007 <= 10 _C5: 7 v000002 + 5 v000005 + 100 v000008 <= 10 _C6: 4 v000003 + 3 v000006 + 2 v000009 <= 0.5 VARIABLES v000001 Continuous v000002 Continuous v000003 Continuous v000004 Continuous v000005 Continuous v000006 Continuous v000007 Continuous v000008 Continuous v000009 Continuous
ソルバーの実行と実行結果
モデルが作成出来たら、以下のようにソルバーを実行します。実行自体は、solve
で簡単に実行できますが、最適解が求まったかどうかを確認するため、合わせてステータスを表示しています。
m.solve() # ソルバーの実行 print('status = ' + LpStatus[m.status]) # ステータスの表示
以下の通り、最適解が得られたことがわかります*3。
status = Optimal
最適解を得られたので、具体的に求めた変数を表示するとともに、最小化された目的関数を計算します。value
を用いることで、変数に代入されている数値を取り出すことができます。
# 目的関数を最小化する変数および最適解の表示 total = 0 for i in range(num_of_task): print() for j in range(num_of_member): print(value(df_var.iloc[i][j]), end=' ') total += value(df_var.iloc[i][j]) * df.iloc[i][j] print() print('total = ' + str(total))
表示結果は以下の通りです。
0.0 1.0 0.0 0.4 0.6 0.0 0.75 0.0 0.25 total = 18.2
続いて、各メンバーの労働時間を表示します。
# 各人の労働時間の計算 total = 0 for j in range(num_of_member): total = 0 for i in range(num_of_task): total += value(df_var.iloc[i][j]) * df.iloc[i][j] print(df.columns[j] + ": " + str(total))
表示結果は以下の通りです。
A: 7.7 B: 10.0 C: 0.5
線形最適化の結果、以下の結果が得られました。
No. | A | B | C | 合計 |
---|---|---|---|---|
Task 1 | ― | 100% | ― | 100% |
Task 2 | 40% | 60% | ― | 100% |
Task 3 | 75% | ― | 25% | 100% |
労働時間 | 7.7 | 10.0 | 0.5 | 18.2 |
使用したプログラム
以下にプログラムをまとめて記載しておきます。
import pandas as pd from pulp import LpProblem, lpSum, value, LpStatus from ortoolpy import addvars df = pd.DataFrame({'A': [100, 8, 6], 'B': [7, 5, 100], 'C': [4, 3, 2]}) num_of_task = len(df) # タスク数 num_of_member = len(df.columns) # メンバー数 # 各々の労働時間数の上限を設定 df_limit = pd.DataFrame({'A': [10], 'B': [10], 'C': [0.5]}) m = LpProblem() # 何も指定しないと目的関数を最小化 df_var = pd.DataFrame(addvars(num_of_task, num_of_member)) # 目的関数 m += lpSum([df.iloc[:, i] * df_var[i] for i in range(num_of_member)]) # 制約条件:割合は合計で100%とする for i in range(num_of_task): m += lpSum(df_var.iloc[i]) == 1 # 制約条件:各々の与えられた時間内で業務を行う for i in range(num_of_member): m += lpSum(df.iloc[:, i] * df_var[i]) <= df_limit.iloc[:, i] print(m) # 目的関数、制約条件を表示 m.solve() # ソルバーの実行 print('status = ' + LpStatus[m.status]) # ステータスの表示 # 目的関数を最小化する変数および最適解の表示 total = 0 for i in range(num_of_task): print() for j in range(num_of_member): print(value(df_var.iloc[i][j]), end=' ') total += value(df_var.iloc[i][j]) * df.iloc[i][j] print() print('total = ' + str(total)) print() # 各人の所要時間の計算 total = 0 for j in range(num_of_member): total = 0 for i in range(num_of_task): total += value(df_var.iloc[i][j]) * df.iloc[i][j] print(df.columns[j] + ": " + str(total))
もう少し複雑な問題を解いてみる
最後に、もう少し複雑な問題を試しに解いてみます。とある経理部における、月次決算のアサインの最適化を考えてみます。課長以下5人のメンバーで、10個のタスクを行うことを考えます。
それぞれのメンバーがタスクを一人で実施する際の所要時間は、以下の通りとします。
(単位:時間) | A | B | C | D | E | |
---|---|---|---|---|---|---|
1 | 入出金記帳 | 10 | 10 | 5 | ― | 10 |
2 | 請求書処理 | 30 | 25 | 20 | ― | 30 |
3 | 立替経費精算 | 25 | 20 | 15 | ― | 30 |
4 | 売上・売上債権 | 30 | 20 | ― | 20 | 30 |
5 | 棚卸資産 | ― | 30 | 20 | 20 | 30 |
6 | 固定資産 | 20 | ― | 30 | ― | 30 |
7 | 社債・借入金 | 15 | 15 | 10 | ― | 20 |
8 | 引当金 | ― | 10 | 5 | 5 | 10 |
9 | 時価評価 | 10 | 10 | 15 | 10 | 10 |
10 | 税効果・税金計算 | ― | ― | 10 | 10 | 10 |
労働時間の制約は以下の通りとします。Bさんは時短のため労働時間が短く、Dさんは係長のため初歩的な仕事は行いません。そしてEさんは課長であり、基本的にはタスクを行わないという設定です。
(単位:時間) | A | B | C | D | E |
---|---|---|---|---|---|
労働時間数の上限 | 55 | 25 | 40 | 20 | 5 |
上記のプログラムを使って解いてみると、以下の結果となりました。
A | B | C | D | E | 合計 | ||
---|---|---|---|---|---|---|---|
1 | 入出金記帳 | ― | ― | 100% | ― | ― | 100% |
2 | 請求書処理 | 30% | 20% | 50% | ― | ― | 100% |
3 | 立替経費精算 | ― | ― | 100% | ― | ― | 100% |
4 | 売上・売上債権 | ― | 100% | ― | ― | ― | 100% |
5 | 棚卸資産 | ― | ― | 25% | 75% | ― | 100% |
6 | 固定資産 | 100% | ― | ― | ― | ― | 100% |
7 | 社債・借入金 | 100% | ― | ― | ― | ― | 100% |
8 | 引当金 | ― | ― | ― | 100% | ― | 100% |
9 | 時価評価 | 100% | ― | ― | ― | ― | 100% |
10 | 税効果・税金計算 | ― | ― | 50% | ― | 50% | 100% |
労働時間 | 54.0 | 25.0 | 40.0 | 20.0 | 5.0 | 144.0 |
男性の育児・育休について
2019年の終わり頃、第一子となる娘が誕生しました。生後2か月を過ぎて思ったことや、男性の育児や育休についていま感じていることを、つらつらと記録しておきたいと思います。これから子どもが産まれる方(特に男性)の参考になれば幸いです。
子どもが産まれた直後のこと
私の妻は出産後1週間ほどで退院し、実家に1ヶ月半ほど滞在していました*1。一応、里帰り出産となりますが、自宅と妻の実家とは1時間程度で行ける距離ですので、私はしばらくの間、毎週末に妻の実家を訪ねて子どもの面倒を見る生活を送っていました。
夫の育児参加は、とにかく最初が肝心です。沐浴(ベビーバスを使ってお風呂に入れること)、オムツ替え、粉ミルクの調合*2は、退院後すぐに行う必要があります。最初は夫婦ともに素人ですので、右往左往しながら対応するのですが*3、ここで夫も一緒に協力しないと、育児スキルに大きな差がついてしまい、後から追いつくことが困難になります。そうすると、育児参加の壁がどんどん高くなっていきます。よって、繰り返しになりますが、最初がとにかく肝心です。
子どもが産まれる前に、自治体が開催している両親学級に参加したのも効果的でした。ここでは、保育士の方が、沐浴やオムツ替えの仕方を教えてくれます。もちろん人形を使った実習なので、あまり役に立たないのではないかとも思っていましたが、今から振り返ると、保育士の方から「正しいやり方」を教わる貴重な機会だったと思います。「正しいやり方」を教わらないと、ずっと自己流になってしまい、やり方が正しいのかどうか自信が持てません*4。
とにかく産まれたばかりの赤ちゃんはわからないことが多くて困惑します。たとえば、やたらしゃっくりが多かったり、睡眠時間が長すぎたりして心配になることもありました。ミルクを飲む量もどのくらいが適正かよくわからず、泣くたびに与えていたので体重が増えすぎてしまったこともありました。私はしばらくの間は週末だけの育児でしたが、週末は一晩中、なかなか寝付かない赤ちゃんの面倒を見ていました。赤ちゃんは産まれた直後は昼夜の区別がないので、夜中でもなかなか寝てくれません。平日は妻が面倒を見ていましたので、週末だけは私が夜中も面倒を見るようにしていましたが、それでも大変でした。
ただし、産後2~3か月も経てば大分慣れてきて、大変だった育児も日常の一部となってきました。大変なのは最初だけだと思って、あまり深刻に考えずに取り組むのが良いと思います。
育休について
産まれた直後の1ヶ月は、妻の身体は本当に大変そうでした。いわゆる「産褥(さんじょく)期」と呼ばれる期間で、昔から「産後1ヶ月で床上げ」というように、基本的には寝たきりで過ごすのが身体の回復のためには良いとされています。
我が家の場合は、妻は里帰り出産で実家に帰っていたことと、私自身の仕事が忙しい時期と重なったこともあり、出産直後に育児休業(育休、なお育児休暇ではない)は取得しませんでした。今後、仕事が落ち着いてから、1か月程度取得したいと考えています。里帰り出産でないのであれば、出産直後に男性が育休を取ることは強く推奨されるべきだと思います。
いまだに日本社会では、「男は働いて金を稼げばそれで良い」という価値観が(男女ともに)根強く残っているように思います。男性が育休を取ることについて、男性上司のみならず、年配の女性がしかめ面をすることもあるようです。妻が育休を取っているのだから、夫が育休を取る必要はない、男は働いでお金を稼ぐべきだ、というわけです。しかし、そもそも母親一人の育児(ワンオペ育児)が大変だ、ということが問題なのです。夫婦二人の子どもであり、夫婦二人で子育てするべきなのは当然であるように思います。
一方、この手の話は、妻の側がどの程度キャリアを考えているのかによっても変わってくるように思います。専業主婦になりたいのか、それともできれば仕事を続けてキャリア形成したいのか、それによって、夫婦間の育児分担の方向性は全く異なってくるでしょう。つまり、一般的に産褥期における男性の育休は必要であるとしても、「男性は必ず半年~1年超程度の長期間の育休を取得するべき」などと画一的なルールを決めることはできず、夫婦間で話し合って育児方針を決めたら、それが認められる、実現できるような社会が理想であるように思います。
男性も育児をするのが当然
最近は育休を取る男性が少しずつ増えてきており、私の周りでも実際に育休を取得した男性の話を聞くようになりましたが、育休を取っても育児をしなければ意味がありません。中には、育休を取ってただ遊んでいるだけの男性もいると聞きます。「育児をしない男を、父とは呼ばない」と書かれたポスターを厚生省(当時)が1999年に作成して話題となったそうですが、今でも育児をしない男性は一定数いるようです。
もっとも、私の周りを見る限り、最近の若い男性は当然に育児を行う傾向があるように思っています*5。女性の立場としては、結婚相手が育児をするかどうかを結婚前に良く見極めておくことが重要であると思います*6。
希望すれば育休を取れることが当たり前の社会へ
最近ではメガバンクなど大企業でも男性の育休の取得を推奨することが増えてきています。育休が取れることがステータス、という価値観になりつつあり、好ましい流れだと思います*7。逆に、有休を取らせない会社がブラック企業であるのと同様、育休が取れない会社もブラック企業と呼ばれるようになるかもしれません。実際、「育休を取られると業務が回らなくて困る」というのは業務が属人化している証拠であり、もしその人が辞めたらどうするのか、会社としてその体制で大丈夫なのか、と思ってしまいます。育休の取得は半年以上前から分かるはずなので、いくらでも準備はできると思います。
とはいえ現実的に半年や一年休むと元の職場(部署)への復帰が難しいこともあると思います。1か月程度であればやりくりできても、長期の不在になると新しい人がアサインされてしまい、戻る場所がなくなってしまう可能性もあり、そうすると会社内でのキャリアが断絶してしまうリスクもあるのです。これは現状、長期の育休を余儀なくされる女性についてもまったく同様であり、キャリア形成を重視する女性にとっては深刻な問題です。
この点、私が昔所属していた監査法人では、産休・育休が明けて職場に復帰した際に、元々の監査チームには戻れないことがあったとしても、他の人手が足りない監査チームに移って活躍することができる環境にありました。監査法人のようなプロフェッショナルファームであれば、キャリア上の障害についてはあまり心配しなくても良いのかもしれません。一般企業ではこのようなことは難しいかもしれませんが、いずれにしてもキャリア形成においては専門性の有無が重要で、このあたりは転職についてと同じような話なのかもしれません。
*1:私は12月決算の会社の経理マンをしているため、期末決算対応の1月が1年でもっとも忙しく、平日に育児をする余力が全くなさそうだったので、仕事が落ち着くまで少し長めに実家に帰ってもらいました。
*2:我が家では粉ミルクと母乳の混合を行っています。粉ミルクを使えば父親もミルクを与えられるため、母親が長時間外出することも可能になります。完全母乳を勧められて粉ミルクなしで育てる場合や、そもそも粉ミルクを飲まない赤ちゃんもいるようですが、母乳だけで育てるのは本当に大変だと思います。。。
*3:最初はお風呂に入れた後、服を着せるのにも一苦労でした。
*4:夫の立場としては、妻から教わるより、保育士さんから教わった方が素直に受け入れられるということもあるかもしれません。
*5:子どものオムツ替えをしたことがない等と言っている若い男性に会ったことはありませんし、少なくとも育児をしないことを堂々と口にする若い男性は皆無であるように思います。
*6:特にインターネット上で、妻の旦那に対する愚痴の書き込みを見る度に、強くそう思います。おせっかいながら、若い未婚女性にはこの話を良くするようにしています。笑
*7:上でも書いた通り、全員の取得が必須なのではなく、育休を取りたい人が取れることが大事だと思います。
間接法によるキャッシュ・フロー計算書の本質
経理部メンバーに間接法キャッシュ・フロー(CF)計算書の仕組みを説明するにあたり、改めてCF計算書について考えてみました。間接法CF計算書の仕組みについて知りたい方の参考になれば幸いです。
なお、ここでキャッシュ(Cash)とは基本的に現金と預金の合計を指し、キャッシュ・フロー(CF)はその変動額(キャッシュが増加すればプラス、減少すればマイナス)を指します。
この記事は主に以下の方に向けて書かれています。
この記事には以下の内容が書かれています。
- 静態論と動態論、資産負債アプローチの考え方を絡めて、キャッシュ・フロー計算書の仕組みを説明しています。
- 簡単な数式を用いて、間接法の考え方を説明しています。数式を用いると、営業キャッシュ・フローを求める際に、なぜ減価償却費を足す必要があるのかが明確に理解できます。
CF計算書の本質とは
そもそも、財務諸表においてBS*1とPL*2が基本となる財務表であり、CF計算書は付属的なもの(おまけ?)という認識が一般的であると思います。実際に、会社法計算書類では、BSとPL(とSS*3)についてのみ開示が求められており、CF計算書の作成は求められていません。
しかし、もともと、BSとは損益にはならないが、キャッシュに変動がある項目を記録するものです。たとえば、100万円で固定資産を購入した場合、CFは▲100万円となりますが、直ちに費用とはなりません(減価償却費として徐々に費用化されます)。その差額を記録するために、BSに100万円の資産として計上するわけです。つまり、BSはPLにおける損益とCFとの差額(ズレ)を記録するための資料です*4。こう考えると、PLとCFが中心にあって、BSが付属的であるとも考えられます。
この考え方が理解できれば、PL上の損益から、BSの差額を調整してCFを導く、間接法CF計算書の仕組みが容易に理解できるようになるはずです。
静態論と動態論、そして資産負債アプローチへ
上記は、会計学でいえば、動態論の考え方です。元々複式簿記が誕生した頃は、大航海時代におけるプロジェクト型組織の損益計算が主目的だったこともあり、BSにおいて財産の価値を表示することが重視されていましたが(静態論)、永続的な会社が誕生することで、期間損益を適正に計算すること、PLにおける損益が重視されるようになりました(動態論)*5。現在では、財務諸表の主目的が企業価値評価とされていることから(詳しくはこちらのエントリーをご覧ください)、資産負債アプローチといわれる、BSを重視する考え方が再び主流となっています。ただし、かつての静態論が「いま会社を解散したらどれだけの価値が残るか」という観点だったのに対し、資産負債アプローチは「継続する会社を前提として、企業価値評価に役立つか」という観点が重視されており、いずれもBS重視ではあるものの、内容は大きく異なります。蛇足ですが、これは、ある意味会計学が弁証法的に発展していることを示す好例なのかもしれません。
間接法CF計算書の数式によるアプローチ
間接法に関しては、簡単な数式を使ったほうが、理解しやすいかもしれません。以下、数式を用いて間接法CF計算書の考え方を説明します。数式といっても、足し算と引き算しか出てきませんので、ご安心ください。
BSの貸借は一致しているので、資産A(Assets)、負債L(Liabilities)、純資産NA(Net Assets)の間に、以下の恒等式が成り立ちます(貸借対照表等式)。
ここで資産AをキャッシュC(Cash)とそれ以外の資産A’に分解すると、
それぞれの項目の期首と期末との差額(期末-期首)をΔ(デルタ)を付けて表現すると、当然に以下が成り立ちます*6。
このとき、ΔCはまさにCF(期首と期末との間のキャッシュの変動)を意味しており、ΔNAは特殊な項目がないとすれば、すなわち利益Profitと一致します。よって、
移項すると、
となり、間接法の損益計算書の等式が導けます。つまり、CFは、利益から(キャッシュ以外の)資産の増加額をマイナスし、負債の増加額をプラスすれば求まります。式で書くと少し仰々しいですが、よく考えれば、ごくごく当たり前の話でもあります。
営業CFを間接法で求める数式
実際のCF計算書では、CFを営業CF、財務CF、投資CFに分けたうえで、営業CFのみを間接法、それ以外を直接法で記載するのが一般的です。これも式で表現してみましょう。
以下、簡便のために、投資CFは固定資産の取得のみ、財務CFは銀行借入のみと考えます。
キャッシュ以外の資産A’を、固定資産FA(Fixed assets)とその他の資産OA(Other assets)とに分解します。
負債も、借入金BL(Bank loan)とその他の負債OL(Other liabilities)とに分解します。
投資CFは、固定資産の取得によるキャッシュアウトですが、これは固定資産の増加額ΔFAに減価償却費Dep(Depreciation)を足した金額となります*7。キャッシュが流出しているので、この金額にマイナス(-)をつけてキャッシュアウトとする必要があります。
財務CFは、銀行借入によるキャッシュインであり、これは借入金の増加額ΔBLと一致しますので、以下の式が成り立ちます。こちらはキャッシュインのため、プラス符号のままでOKです。
⑥式を、⑤式に代入します。
⑦~⑩式を、⑪に代入します。
式を整理すると、以下の通りです。
このように、営業CFを導く間接法の算式が完成します。つまり、会計上の利益に減価償却費を足して、投資CF、財務CFで調整されないBS項目の増減を加味すれば、営業CFが求まります*8。
実は、なぜ営業CFを求める際に減価償却費を加算するのか、理解していない人が多いように思います。非資金項目だから、などと分かったようなことを言う人が多いですが、CFの計算において固定資産の増減を調整するのであれば、減価償却費の調整は不要になります。
以上、落ち着いて考えれば大した話ではないのですが、このように式変形を用いたCF計算書の説明をあまり見たことがありませんでしたので、簡単に記載してみました。この記事で、間接法CFの理解が深まる方がいらっしゃれば幸いです。
*3:株主資本等変動計算書
*4:これを、BSは各会計期間のPLを結ぶ連結環であるなどと言います。
*5:動態論においては将来の費用が資産として計上されます。たとえば100万円の固定資産を10年で定額法で償却するとき、1年後の簿価は90万円となりますが、この金額は固定資産の価値を表しているわけではなく、将来の費用のかたまりに過ぎない、と考えるわけです。一般的な「資産」のイメージとは異なりますが、これが理解できるかどうかが、会計的な思考ができるかどうかの大きなポイントの一つだと思います。
*6:期首時点、期末時点いずれも②式が成り立つので、それらを差し引くと導出できます。
*7:たとえば期首の固定資産が100、期中の取得が30、減価償却が10であれば期末の固定資産は120です。期中の取得額は、固定資産の増加額20+減価償却10=30として求まります。
*8:今回は便宜上、固定資産の取得、銀行借入のみを想定しましたが、それ以外の投資CF、財務CFが存在したとしても、同様のロジックで説明可能です。
付加価値を生む仕事とは
突然ですが、管理部門の仕事は付加価値を生んでいるのでしょうか。私は管理部門に属する経理マンですが、経理業務は実は付加価値を生んではいないのではないか、最近ふとそんなことを考えていました。
経理マンは付加価値を生んでいるのか
商品を企画し現場で売上を上げるビジネスパーソンや、製品を製造する工場で働く人たち、または新たなイノベーションを起こそうとしている研究者など。彼らが社会に対して付加価値を生んでいること異論の余地はないでしょう。そして彼らの行動をサポートするのが管理部門の役割であります。
一方、経理マンとして頭を使う仕事といえば、たとえば複雑な契約や取引を整理して、会計基準にあてはめて結論を導き、監査法人と協議し合意を取り付けて、会計処理に反映させる、などがあります。高い専門性がないとできない仕事であり、確かにやりがいもあるのですが、これは本当に付加価値のある仕事なのか、そんなことを考えたりするのです。
ちなみに私の古巣である監査法人は、そんな経理部門をカウンターパートとしてサービスを提供しており、企業の現場で生まれる付加価値から、さらに遠いところにいます。
もちろん経済学的な付加価値の定義*1に基づくと、監査法人も収益を上げているのだから、当然に付加価値を生んでいます*2。だからこそ給料をいただいているわけです。それは企業の管理部門も同じでしょう。実際、上場企業の管理部門ともなれば、それなりのお給料をもらって仕事をしており、相応の付加価値を提供しているといえるはずです。もし仮に管理部門の業務をアウトソースしたとしても、アウトソース先にお金を支払わなければならないので、その観点でも付加価値があると言えます。
付加価値と社会的な意義
経済学的な定義とは別に、「付加価値」という言葉は、日常的によく使われる用語でもあります。それは社会的に意義がある、社会に対して新たな価値を提供する、そんなニュアンスが含まれているように思います。
しかしながら、経済学的に定義される付加価値と、社会的な意義は一致しないようにも思います。何度も監査法人と協議を繰り返した結果、複雑な取引が会計的に整理され、文書化できたとして、社会的に何か意味があるのでしょうか。
もちろん上場会社の経理部門は、会社が上場を維持して、資金調達を行ったり、社会的信用を維持したりするために必要な仕事をしており、当然に必要な仕事であると説明されます。文書化を行うのも、投資家への説明や当局対応を行うなど、第三者に対して公明正大に主張を展開するため、必要なことです。しかし、さらに一歩踏み込んで考えると、その仕事は社会的にどのような意義があるのでしょうか。誰かの役に立っているのでしょうか。
どうでもいい仕事(Bullshit jobs)
しばらく前に知った言葉として、”Bullshit jobs”という単語があります。イギリスの社会人類学者David Graeber氏の書籍のタイトルとなっているこの言葉は、直訳すると「クソどうでもいい仕事」という意味であり、消えてしまってもたいして困らない、無意味なくだらない仕事を表します。世の中、このような仕事で溢れており、さらに本当に役に立つ仕事(保育士や看護師など)よりも高い給料をもらっている、というのがこの書籍の主張で、具体的なBullshit jobsとしては、金融サービスや法律コンサルタントなどが挙げられているそうです*3。詳しくは、以下の記事をご覧ください。
いまの私の仕事はBullshit jobなのではないか、なくなっても社会的に困らないのではないか、この記事を読んで、そんなことを考えさせられました。
まとめ
現在私は小さなベンチャー企業に在籍していますが、私自身は、会社の活動そのものに社会的意義が認められるのであれば、それをバックアップする管理部門の仕事も当然に社会的意義があると考えています。大企業になると、会社が社会的意義をもたらす活動と、自らの目の前の業務との乖離が大きくなり、結果として自らの仕事に社会的な意義を感じられなくなってしまうのかもしれません。
新年早々ややネガティブな話題となってしまいましたが、自らの仕事がどのように社会に対して付加価値を生み出しているのか、社会的な意義とのつながりを常に頭に置きつつ、これからも仕事をしていきたいと思います。
*1:企業が生産によって生み出した価値であり,企業の総生産額から,その生産のために消費した財貨や用役の価額を差引いた額。(コトバンクより引用)
*2:通常、「付加価値額 = 営業利益 + 人件費 + 支払利息等 +賃借料 + 租税公課」などと計算されます(加算法による計算)。つまり、営業利益がプラスであれば、さらに人件費を加算するので、付加価値額は当然にプラスとなります。
*3:他の例として私が思いついたのは、グローバル企業にサービスを提供する節税コンサルタントです。各国の税法に精通し、企業の支払う税金を極小化すべく、節税スキームを考える人たちです。間違いなく知的水準の高い人にしか務まらない仕事であると思いますが、国に支払う税金が企業に留保されたとしても、それは国と企業との間のゼロサムゲームであって、社会全体に対して何らの価値も生んでいないようにも見えます。彼らは知的水準が高く、高収入を得ていたとしても、社会的な意義はほとんどないように思います。
日本市場の株価はバブル期を超えた?
このブログは令和の時代になってから始めましたが、平成の終わりを迎えるにあたり、株価がバブル期を超えた、といった記事がありました。
もちろん、平成の終わりの時点において、日経平均株価はバブル期の最高値の6割弱に過ぎません。では何がバブル期を超えたか、といえば、それは日本市場全体の時価総額です。
少し探してみたのですが、日本市場の時価総額推移のグラフがありませんでしたので、東証の公表しているデータを使用し、日本市場の時価総額≒東証の時価総額とみなして、自ら作成してみました。
なお、比較として用いる日経平均株価は、長期間の時系列データがなかなか見つからず*1、海外のこちらのサイトから取得しました。
さて、さっそく1980年から平成の終わり(2019年4月末)までの、東証時価総額と日経平均株価の推移をグラフにしたものが以下になります。
これを見ると、1998年頃まではほとんど両者は同じように動いていたものが、それ以降徐々に乖離し、今では大きく乖離している様子が分かります。日経平均株価はバブル最高値にまだまだ達していませんが、東証時価総額は2015年5月にバブル期(611兆円)を超え(620兆円)、2018年1月に最高値(710兆円)を付け、平成が終わる2019年4月においても、バブル最高値を超える水準(631兆円)となっています。
ではなぜこんなに大きく乖離しているのでしょうか。理由としては、上場する会社数が増加していることが挙げられます。東証上場会社数の推移は以下の通りです。元データはこちら。
株価のグラフが丸くなっていますが、これは参考程度ということで。。棒グラフに着目すると、2000年以降、東証上場会社数は増加傾向にあります。2013年に急増しているのは、東証が大阪証券取引所と統合したことによります。これにより社数は大きく増加しましたが、大証のみに上場していた銘柄には大型株が少ないため、株式時価総額への影響は限定的となっているようです。
いずれにしても、日経平均株価は株式市場全体の時価総額とは一致しなくなっています。会社数が増えているのだから時価総額が増えるのは当然で、それ自体に意味はない、という主張をする人もいるかもしれませんが、もちろんそんなことはありません。従来は、一部の金融株などがバブルで高騰し、日経平均株価を引き上げていましたが、現在では、日経225に含まれないような多くの中堅上場企業が奮闘している、言い換えれば日本の資本市場の厚みが大きく増したことを示しているのであり、良いことだと私は考えています。
とはいえ、令和の時代、それも比較的早いうちに、日経平均株価がバブル期の最高値を超え、史上最高値(4万円超え)を更新することを期待したいと思います。
結局、過去20年間で日本は経済成長したのか、今後はどうなるのかをグラフで眺める
この記事は主に以下の方に向けて書かれています。
- 世界経済における日本の立ち位置、諸外国と比べた時の日本の経済規模の推移、将来予測をざっくり把握したい方
この記事には以下の内容が書かれています。
1人当たり実質GDPの1992年以降の成長率の観点で主要国経済を眺めると、
G20における1人当たり名目GDP推移
失われた20年と言われる期間、日本のGDPは諸外国と比べてどうなっていたのか。今後はどうなるのか。過去のエントリーでも少し考えてみましたが、今回は主要先進国(G7)の1人当たり名目GDPに関して、IMF(国際通貨基金)が公表しているWorld Economic Outlookのデータを用いて、予測数値も含め、1980年~2024年の45年間の推移をグラフにしました。
失われた20年を1995年~2015年として強調してみると、以下の通りです。
これを見ると、日本の1人当たり名目GDPは1990年~1995年に大きく伸長していますが、これは為替の影響によるところが大きく、不自然な伸びであったといえるのではないでしょうか。米ドル表示の都合上、為替の影響を受けないアメリカが安定的に成長し、独走状態に入っています。2000年以降、日本はG7の中で埋没しつつも、IMF予測によると、2024年時点では英仏を大きく引き離して、独加とほぼ同水準にまで成長することが見込まれています。ドイツ以外のヨーロッパ諸国の成長率は著しく鈍化することが見込まれているということでしょうか。この予測によると、G7の中で日本が著しく劣るということはなさそうです。
次に、対象をG20に広げて、同じようにグラフを作成してみます。
G7に割り込む形でオーストラリアが大きく成長しています。一方、韓国も大きく成長してきており、G7の一角であるイタリアを数年内に追い越すことが予測されています。イタリアを追い越すと、韓国の経済水準が主要先進国(G7)に並んだと言えるかもしれませんが、昨今の韓国経済の状況を見ると、そう簡単にイタリアを追い越すことはできないかもしれません。ただ、いずれにしても、昨今の日韓対立に関して、韓国経済を過小評価している言説をいまだに見ますが、現実を直視することが必要であるように思います。こちらのエントリーでも書きましたが、1人当たり購買力平価GDPであれば、2023年に韓国が日本を追い越す予測となっており、日本も安穏としてはいられない状況であることが分かります。
さて、その他の国々を見ると、インド、インドネシアなどは、まだまだ低い水準にとどまっています。多くの人口を抱えるこれらの国が、中国並みに発展を加速するようになれば、世界経済へのインパクトは相当大きくなると思いますが、グラフを見る限り、それはまだ当面先になるようです。
その中国は、2024年には、ロシアやアルゼンチンも追い越し、G20の密集グループの中ではトップとなる見込みです。すなわち、G20の中では、1人当たり名目GDPで見たとしても、G7、オーストラリア、韓国、サウジアラビアに続く水準になるということです。中国の圧倒的な人口の多さを考えると、これはとてつもないインパクトがあることだと思います。
なお、参考として、2024年時点の、名目GDP予測ランキング(上位30か国)を載せておきます。
以上、名目GDPをベースしたグラフを紹介しましたが、購買力平価GDPに関しては、以下の2つのエントリーで多数のグラフを紹介していますので、興味のある方はご覧ください。
G20における1人当たり実質GDP(自国通貨建)の伸び率の推移
続いて、1人当たり実質GDP(自国通貨建)を用いて、為替影響を除外して、過去25年で各国経済がどの程度成長したのかをグラフで示したいと思います。単位を揃えるため、1992年を100としたときのグラフを作成します*1。なお、ここでは実質GDPを用いていますが、これは名目GDPを用いるとインフレ率の高い一部の国の数値が異常値となるためです。よって、物価変動を考慮した実質GDPを利用します。
上のグラフを見ると、中国が圧倒的に成長し、続いてインド、韓国、インドネシア、トルコが大きく伸びています。それ以外の国々は団子になっていますが、次に縦軸の上限を200として、再度グラフを作成します。
これを見ると、G20の中で日本よりも成長率が低い国は、イタリア、サウジアラビアの2か国だけだということが分かります。確かに日本の成長率の低さが際立っています。もっとも、日本も厳しい状況ながら、イタリアは大丈夫なのか、かなり心配になりますが*2。。他のG7の国々を見ると、米英の成長率が高く、それに加独が続き、フランスは日本より少し上といったところです。
日本も少なくともG7平均並みの成長を維持できるよう、適切な設備投資による生産性向上に取り組んでいく必要がありそうです。ただし、最近よく見かける、日本経済が先進国から転落した、すでに後進国になった、と言ったような極端な言説はさすがにミスリードであり、以上で示した複数のグラフを見る限り、あまり真に受ける必要はなさそうです。
*1:1992年を基準としているのは、1991年以前のデータが欠落している国があること、また日本においてもバブル崩壊の真っ只中で大きな転機となった年であることが理由です。
*2:イタリアは南北格差が激しく、南イタリアの生産性は北イタリアに比べてはるかに低く、経済的にも停滞しています。一方、北イタリアの生産性の高さはドイツより高いとも言われ、イタリア全体で見ると、南イタリアが足を引っ張っている状況です。これは、北部と南部とでは歴史が大きく異なることに起因し、1861年に北イタリアのサヴォイア王家により南北統一がなされて以降も、ずっと続いている問題です。イタリア政府は南部の経済振興に多額の資金を投じていますが、これがマフィアやそれとつながる利権集団に流れ、全く成果が上がっていないことは良く知られています。このあたりの事情については、日本在住のイタリア人著者による「イタリア人と日本人、どっちがバカ?」という新書本がわかりやすくておススメです。
過去20年間の日本経済(GDP)の推移をグラフで眺める(購買力平価GDP編その2)
この記事は主に以下の方に向けて書かれています。
- アジアにおける日本経済の立ち位置、日本とアジア主要国の経済力の現状をざっくり把握したい方
- アジアの中で日本の経済的優位が失われていくことを危惧されている方
この記事には以下の内容が書かれています。
- 1人当たり購買力平価GDPで見ると、日本はシンガポール、香港、台湾を下回っており、韓国にも5年内に逆転される見込み
- 1人当たり名目GDPで見ても、日本はシンガポール、香港にすでに逆転されている(台湾、韓国には当面の間追いつかれることはない)
- 日本全体ではなく、東京都の一人当たり名目GDPで比較すると、東京都はシンガポールを上回っている
- 東京都の名目GDPは韓国・ロシアには及ばずトルコと同程度、関東地方全体であればカナダ、イタリアを上回る
アジアにおける日本の1人当たり購買力平価GDP
前回のエントリーで、日本の1人当たり購買力平価GDPは、他の主要先進国(G7)と比べて著しく低い水準ではないものの、新興国の猛追を受けており、特に韓国には2023年に逆転される予測となっている、と書きました。
前回は、世界の主要国としてG20の国々のGDPをグラフで示しましたが、今回はアジアに限定して、アジア主要国・地域として、日本の他に中国、香港、韓国、シンガポール、台湾を比較対象としてグラフを作成しました。1人当たり購買力平価GDPのグラフは以下の通りです。
上のグラフを見ると、日本はすでにシンガポール、香港、台湾に追い抜かれていることが分かります。もっとも、1980年頃から、日本の1人当たり購買力平価GDPはシンガポール、香港とは大差がなく、1990年頃からシンガポールが、2005年頃から香港が、日本の水準を上回ってきていることが分かります。そして2010年頃には台湾に逆転され、2023年には韓国にも逆転される見込みとなっています。
シンガポールについては、すでに日本の2倍を大きく超える水準となっており、これはG7でトップのアメリカをも大きく上回っている状況です。
アジアにおける日本の1人当たり名目GDP
以上は1人当たり購買力平価GDPでの比較でしたが、それでは1人当たり名目GDPではどうでしょうか。同じようにグラフにしてみます。
上のグラフを見ると、名目GDPでも、2010年頃にシンガポールに追い越され、その数年後に香港にも追い越されていることが分かります。名目GDPでは、一人当たりGDPが韓国>台湾となっており(購買力平価GDPでは台湾>韓国)、韓国、台湾に対しては当面の間は日本が優位を保つ予測となっています。
いずれにしても、1990年頃には他のアジア主要国と比べて圧倒的に高かった日本のGDPも、今ではアジアの中で圧倒的に高いとまでは言えない水準となっています。
最後に、参考までに国全体の名目GDPをグラフにしてみました。
やはり中国の圧勝です。それ以外の国・地域も、人口が少ないため、日本と比べるとまだまだ小さい水準であることが分かります。経済規模で言えば、少なくとも今後数十年間は、日本はアジア第2位の地位に留まることは確実なように思います。
東京都のGDP
シンガポールや香港が、一人当たり購買力平価GDPのみならず、一人当たり名目GDPでも日本を超えた、というのは、なかなかショッキングな事実です。一方、これらの都市国家と、日本という巨大な国家を比べるのは無理があるのではないか、比べるなら東京都と比較すべきではないのか、といった意見もあるかと思います。
この点については、内閣府が都道府県別のGDP(県内総生産)を発表しており、東京都も東京都の経済計算の詳細を公表しています。これらを分析するのも興味深いのですが、東京都が都債発行のために作成している資料に、まさに知りたい情報をまとめた資料がありましたので、今回はこちらをそのまま以下に引用します。
これを見ると、東京都の一人当たりGDPは、シンガポールはもちろん、アメリカをも上回っていることが分かります。もちろんアメリカの有力都市には劣るのでしょうが、なかなか高い水準であることが分かります。なお、日本の人口の1割弱が集中する東京都の平均が、日本全体の平均を大きく上回っているあたり、日本の地域別経済格差の存在を浮き彫りにしているとも言えます。
参考までに、GDPの絶対額についても引用しておきます。
東京都の経済規模は韓国やオーストラリア、ロシアには負けており、トルコと同水準のようです。ちなみに、関東地方で見ると、韓国はおろか、カナダやイタリアをも上回る水準となります。これは内閣府の資料に記載があり、以下に引用します。
公的機関が公表している統計数値は興味深いものが多いので、もし興味がある方はいろいろ探してみると面白いと思います。