愛記システムの基本設計:DApps側である愛記システム 評価制度の確立 波動レベルの偏り | 続・ティール組織 研究会のブログ

続・ティール組織 研究会のブログ

ティール組織が話題になっているが、具現化するにはどうしたらよいか?
その研究を続けるにあたり、さらに次の形態である、続・ティール組織なるものまで視野に入れ、具体的な施策・行動内容を研究・支援する会。

先までは、"愛記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。概念設計としてはひとまず終えた。次は、フェデレーションモデル全体の基本設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。そして、それにつながるDApps側である「愛記システム」を、Pythonプログラムで開発していきたい。

 

愛の行動のPL,BSを決算書として、個人単位、市町村単位、で公表するような愛記システムというものを考えている。愛の行動のデータベースはブロックチェーンのプログラムであり、日々の愛の行動による愛貨の移動を決算書にまとめていきたい。なお、市町村のブロックチェーンのプログラムは以前にも記載している。その市町村のブロックチェーンのプログラムにつながる愛記システムを、DApps側であるPythonプログラムとして設計したい。その場合、基本設計をどのような手順で進めていけばよいか、詳しく見ていこう。

 

愛記システムを設計するための基本手順を以下に示す。このシステムは、Pythonを用いて市町村のブロックチェーンと連携し、個人および市町村単位での愛の行動のデータを収集、記録し、決算書(PL、BS)として公表するものである。

基本設計のステップ

  1. 要件定義
  2. アーキテクチャ設計
  3. データベース設計
  4. API設計
  5. ブロックチェーンインターフェース
  6. 決算書の生成
  7. フロントエンド開発
  8. テストとデプロイ

基本設計の各ステップを順番に進めることで、ブロックチェーンとDAppsとして繋がる「愛記システム」の詳細な設計が可能になる。各ステップでは、関係者との協議やレビューを通じて設計内容を確定していくことが重要である。

1.要件定義

まず、基本設計の最初のステップである要件定義をしていきたい。どのような機能が必要か、どのような問題を解決するのかを洗い出したい。要件定義はシステム設計の最初の重要なステップであり、システムが解決するべき問題と、必要な機能を明確に定義するプロセスである。以下に、愛記システムのプログラムに必要な機能と解決すべき問題を列挙してみよう。

機能要件

  1. 愛の行動の記録

  2. 愛貨の移動の記録

  3. 決算書の生成

  4. 個人および市町村単位でのデータの集約

  5. データのブロックチェーンへの記録と取得

  6. 愛貨の管理

  7. ユーザー管理

  8. 通知機能

  9. レポート機能

  10. ダッシュボード

非機能要件

  1. セキュリティ

  2. 可用性

  3. パフォーマンス

  4. スケーラビリティ

  5. ユーザビリティ

  6. コンプライアンス

解決すべき問題

  1. 透明性と信頼性の確保

  2. データの一元管理

  3. 愛の行動の促進

  4. 評価制度の確立

  5. データのセキュリティとプライバシーの保護

これらの要件を基に、愛記システムの基本設計を進めていくことが重要である。次のステップでは、これらの要件を具体的なアーキテクチャ設計に反映していくことになる。まずは、要件定義の解決すべき問題を一つずつクリアにしていきたい。

評価制度の確立

愛の行動の評価は、以下のような基準とプロセスに基づいて行われる。これにより、ユーザーの行動を評価し、フィードバックを提供する。

評価基準

  • 波動レベル:波動レベルが偏らないこと。
  • ゆらぎ件数:月に3件以上のゆらぎを達成すること。
  • 対象相手:行動の対象が特定の相手に偏らないこと。
  • 次元:行動が特定の次元に偏らないこと。
  • 愛の行動量:月に30回以上の愛の行動を行うこと。

評価プロセス

  1. データ収集

    • 各ユーザーの愛の行動データを月次で収集する。
    • 行動の日時、対象相手、次元、波動レベル、愛の行動量などのデータを記録する。
  2. コンピテンシーモデルの設定

    • 標準行動モデルを設定し、これに基づいて評価基準を設ける。
    • 時間の経過とともに基準を見直し、更新する。
  3. データ分析

    • 収集されたデータをもとに、各ユーザーの行動を評価する。
    • 偏りの分析には、標準偏差などの統計的手法を用いる。
  4. フィードバックの提供

    • 評価結果をユーザーにフィードバックする。
    • グラフやレポート形式で視覚的に表示し、自己理解を促進する。
       

波動レベルの偏りの評価システムの設計

評価基準

  • 波動レベルの均一性:波動レベルが1〜10の各レベルに偏らずに分布していること。

評価プロセス

  1. データ収集

    • 各ユーザーの波動レベルデータを月次で収集する。
    • 各レベルの行動回数とその合計愛貨を記録する。
  2. データの正規化

    • 各波動レベルの行動回数に基づき、標準偏差を計算する。
  3. 偏りの評価

    • 各波動レベルの行動回数と標準偏差を比較し、偏りを評価する。
    • 偏りの少ないユーザーは高評価を得る。

データ収集の詳細設計

  1. データ収集のタイミング

    • リアルタイム収集:ユーザーが行動を記録するたびにデータを収集する。
    • 月次集計:毎月末にデータを集計し、評価を行う。
  2. データ収集の場所

    • DApps内:ユーザーが行動を入力するDApps(モバイルアプリやWebアプリ)からデータを収集する。
    • サーバーサイド:データはサーバーに保存され、バックエンドで集計・分析される。
  3. 収集するデータの内容

    • 日時:行動が記録された日時。
    • 波動レベル:行動時の波動レベル。
    • 行動の種類:行動の種類(ゆらぎ、通常行動など)。
    • 愛貨の額:各行動に対する愛貨の額。

・データ収集部分

以下に、DApps内でユーザーの行動を記録し、サーバーに送信するPythonプログラムの例を示す。
import requests
from datetime import datetime

# 行動のデータを記録する関数
def record_action(user_id, vibration_level, action_type, action_content, love_currency_amount):
    action_data = {
        'user_id': user_id,
        'action_date': datetime.now().isoformat(),
        'vibration_level': vibration_level,
        'action_type': action_type,
        'action_content': action_content,
        'love_currency_amount': love_currency_amount
    }
    
    # サーバーにデータを送信
    response = requests.post('https://example.com/api/record_action', json=action_data)
    
    if response.status_code == 200:
        print("Action recorded successfully")
    else:
        print("Failed to record action")

# サンプルデータの記録
record_action(1, 3, 'ゆらぎ', '親切な行動をした', 70)
record_action(1, 5, '通常', '助けを提供した', 130)
record_action(2, 7, 'ゆらぎ', '感謝の言葉をかけた', 190)
 

サーバーサイドのデータ収集と評価

サーバー側では、収集されたデータを保存し、月次で評価を行う。以下にその例を示す。

・サーバーサイドの実装(Flask + SQLAlchemy)
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime, timedelta
import statistics

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///actions.db'
db = SQLAlchemy(app)

class Action(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, nullable=False)
    action_date = db.Column(db.DateTime, nullable=False)
    vibration_level = db.Column(db.Integer, nullable=False)
    action_type = db.Column(db.String(80), nullable=False)
    action_content = db.Column(db.String(200), nullable=False)
    love_currency_amount = db.Column(db.Float, nullable=False)

@app.route('/api/record_action', methods=['POST'])
def record_action():
    data = request.json
    new_action = Action(
        user_id=data['user_id'],
        action_date=datetime.fromisoformat(data['action_date']),
        vibration_level=data['vibration_level'],
        action_type=data['action_type'],
        action_content=data['action_content'],
        love_currency_amount=data['love_currency_amount']
    )
    db.session.add(new_action)
    db.session.commit()
    return jsonify({"message": "Action recorded successfully"}), 200

@app.route('/api/evaluate_vibration_levels', methods=['GET'])
def evaluate_vibration_levels():
    user_id = request.args.get('user_id')
    start_date = datetime.now() - timedelta(days=30)
    actions = Action.query.filter(Action.user_id == user_id, Action.action_date >= start_date).all()
    
    vibration_levels = [action.vibration_level for action in actions]
    if not vibration_levels:
        return jsonify({"message": "No actions recorded"}), 404

    average = sum(vibration_levels) / len(vibration_levels)
    variance = statistics.variance(vibration_levels)
    std_deviation = statistics.stdev(vibration_levels)

    return jsonify({
        "average_vibration_level": average,
        "variance": variance,
        "std_deviation": std_deviation
    }), 200

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)
 

波動レベルの偏りを評価するプロセス

  1. リアルタイムデータ収集:ユーザーが行動を記録するたびにデータがサーバーに送信され、データベースに保存される。
  2. 月次集計:月末にデータを集計し、各ユーザーの波動レベルの平均値、分散、標準偏差を計する。
  3. 偏りの評価:分散値が小さいほど、波動レベルが均一に分布していると評価される。標準偏差を利用して、波動レベルの偏りを定量的に評価する。

評価結果の例

以下は、APIが返す評価結果の例である。
{
    "average_vibration_level": 4.6,
    "variance": 2.84,
    "std_deviation": 1.68
}
 

この例では、ユーザーの波動レベルの平均値が4.6、分散が2.84、標準偏差が1.68であることが示されている。この標準偏差の値を基に、ユーザーの波動レベルの偏りを評価し、フィードバックを提供する。以下が全体のフィードバックの例である。
def generate_feedback_message(evaluation_result):
    feedback = "【評価結果】\n"
    feedback += f" - 総行動数: {evaluation_result['total_actions']} 回 {'(達成)' if evaluation_result['action_met'] else '(未達成)'}\n"
    feedback += f" - ゆらぎ件数: {evaluation_result['yuragi_count']} 件 {'(達成)' if evaluation_result['yuragi_met'] else '(未達成)'}\n"
    feedback += f" - 次元の偏り (標準偏差): {evaluation_result['dimension_std']:.2f}\n"
    feedback += f" - 対象の偏り (標準偏差): {evaluation_result['target_std']:.2f}\n"
    feedback += f" - 波動レベルの偏り (標準偏差): {evaluation_result['vibration_std']:.2f}\n"
    return feedback
 

波動レベルの偏りを評価するシステムでは、ユーザーの行動データをリアルタイムで収集し、月次で集計・評価する。分散と標準偏差を用いて波動レベルの均一性を定量的に評価し、ユーザーにフィードバックを提供することで、愛の行動の質を向上させることができるという具合だ。

 

 

いかがであろうか、これで評価項目の1つ、波動レベルの偏りが評価できる。同じようにして他の項目も見ていきたい。