python案例如何结合士气指数做决策?

wen python案例 1

本文目录导读:

python案例如何结合士气指数做决策?

  1. 案例 1:基于士气阈值的最简决策(If-Else 规则)
  2. 案例 2:结合历史趋势与权重(移动平均 + 动态权重)
  3. 案例 3:使用逻辑回归模型预测“离职风险”并辅助决策
  4. 案例 4:模拟强化学习(Q-Learning)实现动态策略

在Python中结合“士气指数”做决策,通常是通过量化指标规则/算法来模拟或辅助决策,这可以是游戏AI、团队管理、员工留存预测或项目排期等场景。

下面提供几个由简到繁的实战案例,帮你理解如何用代码将“士气”转化为实际的决策。


案例 1:基于士气阈值的最简决策(If-Else 规则)

场景:在项目管理中,定期检查团队士气(0-100分),如果士气过低,启动“团建”或“减少工作量”策略。 核心思路:将士气作为硬性门槛,直接触发决策。

import random
def get_team_spirit():
    # 模拟从员工问卷或行为数据计算出的士气值
    return random.randint(30, 95)
def decide_by_spirit(spirit):
    if spirit < 40:
        return "🚨 红色警报:立即启动全员团建,并强制减少加班!"
    elif spirit < 60:
        return "⚠️ 黄色预警:安排1对1沟通,优化任务积压。"
    else:
        return "✅ 绿色状态:保持当前节奏,鼓励创新。"
# 模拟一周五天的决策
for day in ["Mon", "Tue", "Wed", "Thu", "Fri"]:
    spirit = get_team_spirit()
    action = decide_by_spirit(spirit)
    print(f"{day} 士气值: {spirit} -> 决策: {action}")

案例 2:结合历史趋势与权重(移动平均 + 动态权重)

场景:士气不是静止的,最近几天的下降趋势比绝对值更重要,使用 指数加权移动平均法,并给“士气下降速度”赋予决策权重。

核心思路:根据历史数据的斜率(趋势)来微调决策,而不只看当前值。

import pandas as pd
import numpy as np
# 模拟过去五天的士气数据
data = {'day': [1,2,3,4,5],
        'spirit': [70, 65, 58, 50, 42]}
df = pd.DataFrame(data)
# 计算指数加权平均(偏重近期数据)
df['ewm_avg'] = df['spirit'].ewm(span=3, adjust=False).mean()
# 计算趋势斜率(当前值 vs 前三天均值)
df['trend'] = df['spirit'] - df['spirit'].shift(1)
def advanced_decision(row):
    curr_spirit = row['spirit']
    ewm = row['ewm_avg']
    trend = row['trend']
    # 决策逻辑:趋势恶化乘以双倍惩罚
    if trend is not np.nan and trend < -10 and curr_spirit < 55:
        return f"紧急干预:士气暴跌({trend}分),应取消明天所有会议,专项疏导。"
    elif ewm < 55:
        return "调整计划:降低KPI压力,增加午间休息时间。"
    elif curr_spirit > 80:
        return "授权放权:士气高涨,允许团队自行决定技术方案。"
    else:
        return "正常跟进:保持每日站会,关注是否有人划水。"
df['decision'] = df.apply(advanced_decision, axis=1)
print(df[['day','spirit','ewm_avg','trend','decision']].to_string(index=False))

案例 3:使用逻辑回归模型预测“离职风险”并辅助决策

场景:管理层需要预估哪些员工可能因士气低落而离职,以便提前干预。 核心思路:利用历史数据(士气评分、加班时长、满意度问卷)训练一个分类模型,输出离职概率,概率超过临界值则触发“留人策略”。

from sklearn.linear_model import LogisticRegression
import numpy as np
# 训练数据:特征(士气, 连续加班指数, 项目压力), 标签(1=离职,0=留下)
X_train = np.array([[85, 3, 2],
                    [60, 5, 4],
                    [45, 8, 7],
                    [70, 4, 3],
                    [30, 9, 9],
                    [90, 2, 1]])
y_train = np.array([0, 0, 1, 0, 1, 0])
model = LogisticRegression()
model.fit(X_train, y_train)
# 新员工数据:士气=52分,加班指数=7,压力=6
new_emp = np.array([[52, 7, 6]])
prob = model.predict_proba(new_emp)[0][1]  # 离职概率
if prob > 0.7:
    print(f"⚠️ 离职概率高达{prob:.2%}:建议停掉该员工的紧急任务,并发放额外福利。")
elif prob > 0.4:
    print(f"⚙️ 离职概率{prob:.2%}:安排职业规划谈话,转移部分重复性工作。")
else:
    print(f"🟢 离职概率{prob:.2%}:保持现状,适当给予正向反馈。")

案例 4:模拟强化学习(Q-Learning)实现动态策略

场景:游戏AI或复杂的管理系统,士气影响“员工产出”和“产品质量”,需要AI自动探索最佳策略。 核心思路:定义状态(士气区间)、动作(开会/安排任务/放假)、奖励(产出提升),利用Q-learning让智能体学习哪个动作在某些士气下收益最大。

import numpy as np
# 状态:士气低(0)、中(1)、高(2)
# 动作:0(压榨),1(正常),2(激励)
Q = np.zeros((3,3))
alpha, gamma, epsilon = 0.7, 0.9, 0.1
# 模拟一次交互过程
for episode in range(50):
    state = np.random.choice([0,1,2], p=[0.3,0.5,0.2]) # 随机初始士气
    # Epsilon贪心选择动作
    if np.random.random() < epsilon:
        action = np.random.choice([0,1,2])
    else:
        action = np.argmax(Q[state, :])
    # 环境反馈(模拟士气与动作对产出的影响)
    # 士气高时压榨=负奖励,激励=正奖励;士气低时压榨=绝对负奖励
    if state == 0 and action == 0:
        reward = -3
    elif state == 0 and action == 2:
        reward = 3
    elif state == 2 and action == 0:
        reward = -1
    else:
        reward = 1
    # 更新Q表(Q-Learning公式)
    next_state = state
    Q[state, action] = Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]) - Q[state, action])
# 输出决策策略(选择Q值最高的动作)
print("学习到的策略(行:士气状态, 列:最佳动作0/1/2):")
for i, st in enumerate(['士气低','士气中','士气高']):
    best_action = np.argmax(Q[i])
    action_map = {0:'压榨',1:'正常',2:'激励'}
    print(f"{st} -> {action_map[best_action]}")

为了让“士气指数”真正指导决策,你需要:

  1. 定义清晰指标:士气值如何计算?(问卷、出勤率、代码提交频率等)
  2. 确立决策逻辑:是阈值(简单)、趋势(动态)还是模型预测(复杂)?
  3. 反馈闭环:决策执行后,士气如何变化?用于调整阈值或训练模型。

如果需要针对你具体的数据格式(比如Excel表格或数据库)实现,可以再补充说明,我可以直接给出可运行的读取和决策代码。

抱歉,评论功能暂时关闭!