本文目录导读:

- 案例 1:基于士气阈值的最简决策(If-Else 规则)
- 案例 2:结合历史趋势与权重(移动平均 + 动态权重)
- 案例 3:使用逻辑回归模型预测“离职风险”并辅助决策
- 案例 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]}")
为了让“士气指数”真正指导决策,你需要:
- 定义清晰指标:士气值如何计算?(问卷、出勤率、代码提交频率等)
- 确立决策逻辑:是阈值(简单)、趋势(动态)还是模型预测(复杂)?
- 反馈闭环:决策执行后,士气如何变化?用于调整阈值或训练模型。
如果需要针对你具体的数据格式(比如Excel表格或数据库)实现,可以再补充说明,我可以直接给出可运行的读取和决策代码。