<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>数据分析指北 Blog</title>
        <link>https://havef.fun/blog</link>
        <description>数据分析指北 Blog</description>
        <lastBuildDate>Sun, 24 Nov 2024 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-Hans</language>
        <copyright>Copyright © 2025 HaveF.</copyright>
        <item>
            <title><![CDATA[KNIME 5.4 前瞻(2024.12) - 多个表达式功能]]></title>
            <link>https://havef.fun/blog/knime-5.4-new-expression-feature</link>
            <guid>https://havef.fun/blog/knime-5.4-new-expression-feature</guid>
            <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[AI 时代的工作方式]]></description>
            <content:encoded><![CDATA[<p>2024年12月初 KNIME 会发布 5.4 版本。这个版本中 Expression 节点做了进一步的加强，并同时增加了它的兄弟节点 Expression Row Filter 节点和 Variable Expression 节点。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="expression-节点">Expression 节点<a href="https://havef.fun/blog/knime-5.4-new-expression-feature#expression-%E8%8A%82%E7%82%B9" class="hash-link" aria-label="Expression 节点的直接链接" title="Expression 节点的直接链接">​</a></h2>
<p>Expression 节点用于逐行操作数据，允许用户使用 KNIME 表达式语言来对数据进行复杂的转换和计算。通过表达式编辑器，用户可以逐行计算数据并将结果输出到新列或替换现有列。</p>
<p>Expression 节点支持多个表达式的顺序求值功能，这意味着您可以在节点内编写多个表达式，并按从上到下的顺序执行它们。每个表达式的输出可以作为下一个表达式的输入使用，从而实现更复杂的数据处理逻辑。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="expression-row-filter-节点">Expression Row Filter 节点<a href="https://havef.fun/blog/knime-5.4-new-expression-feature#expression-row-filter-%E8%8A%82%E7%82%B9" class="hash-link" aria-label="Expression Row Filter 节点的直接链接" title="Expression Row Filter 节点的直接链接">​</a></h2>
<p>Expression Row Filter 节点用于基于条件过滤数据行。用户可以通过编写逻辑表达式，保留符合条件的行，移除不符合条件的行。与 Expression 节点类似，Expression Row Filter 也可以使用 KNIME 表达式语言来定义过滤逻辑。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="variable-expression-节点">Variable Expression 节点<a href="https://havef.fun/blog/knime-5.4-new-expression-feature#variable-expression-%E8%8A%82%E7%82%B9" class="hash-link" aria-label="Variable Expression 节点的直接链接" title="Variable Expression 节点的直接链接">​</a></h2>
<p>Variable Expression 节点允许用户创建或修改流变量。通过 KNIME 表达式语言，用户可以基于已有流变量的值创建新变量，或者更新现有变量。与其他表达式节点不同，Variable Expression 节点不处理表数据，而是仅操作流变量。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="多个表达式的功能">多个表达式的功能<a href="https://havef.fun/blog/knime-5.4-new-expression-feature#%E5%A4%9A%E4%B8%AA%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="多个表达式的功能的直接链接" title="多个表达式的功能的直接链接">​</a></h2>
<p>大多数表达式节点支持多个表达式的顺序求值，用户可以通过点击“添加表达式”按钮来添加新表达式。每个表达式的执行结果可以被后续的表达式使用，这使得复杂的计算逻辑可以被分解为多个较小的步骤来实现。这种方式不仅增强了表达式的可读性，还使得用户能够轻松调试和调整每一步的逻辑。</p>
<p>每个表达式编辑器中附有控制栏，用户可以方便地移动、复制或删除某个表达式。此外，用户还可以在表达式编辑器中预览每个表达式的计算结果，以验证其正确性。</p>
<p>这一点是指北君觉得最有意思的，看图便知：</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/SCR-20241124-kfrk-e74512929b1a85023a6655e647c4b884.png" width="1186" height="1029" class="img_ev3q"></p>
<section style="width:100%"></section>]]></content:encoded>
            <category>KNIME</category>
        </item>
        <item>
            <title><![CDATA[别再当这样的工程师了（当构建人工智能时）【转载】]]></title>
            <link>https://havef.fun/blog/stop-being-such-an-engineer</link>
            <guid>https://havef.fun/blog/stop-being-such-an-engineer</guid>
            <pubDate>Sat, 23 Nov 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[AI 时代的工作方式]]></description>
            <content:encoded><![CDATA[<blockquote>
<p><a href="https://jxnl.co/" target="_blank" rel="noopener noreferrer">Jason Liu</a> 是 Instructor 的作者而被指北君了解，他也是指北君的偶像之一。他的这篇文章不知道为什么只存在于 Newsletter 中。转载如下：</p>
</blockquote>
<p>这是我在咨询职业生涯中反复强调的第一件事：</p>
<p>每周，每次会议，情景都如出一辙。一位客户向前倾身，眼中充满期待地问道：“我们该用哪种模型？GPT-4 还是 Claude？我们应该微调模型还是优化提示工程？”</p>
<p>而每次我的回答都没有变化：“看你的数据。”</p>
<p>他们期待的是典型的顾问回答 —— “这是个好问题，这取决于情况。” 而我则要求他们直面一个不那么舒适的真相：他们正用工程师的思维去考虑问题，而他们应该以科学家的思维去应对。</p>
<p>工程师热爱确定性。他们想知道“正确”的框架，“最佳”的架构，“最优”的解决方案。在使用诸如 React 或 PostgreSQL 这样的稳定技术时，这种心态非常有用。</p>
<p>但 AI 并不稳定。这是一个迅速演变的领域，昨日的最佳实践可能变成今日的反面案例。</p>
<h1>科学家的方式</h1>
<p>科学家不问“哪种工具最好？”他们会问：</p>
<ul>
<li>我们能验证什么假设？</li>
<li>我们如何衡量成功？</li>
<li>我们进行哪些实验来验证假设？</li>
</ul>
<p>当你在用 AI 进行构建时，你并不是在架构一个具有可预测行为的系统。你是在一个复杂且不断变化的环境中进行实验。</p>
<h1>数据驱动决策的力量</h1>
<p>想知道微调是否有帮助？不要空想——去测试。想比较嵌入模型？做个实验。好奇新 LLM 的成本收益？去测量它。</p>
<p>你的工作不是列举失效模式，也不是辩论架构选择。你的工作是：</p>
<ul>
<li>定义清晰的衡量标准</li>
<li>进行受控实验</li>
<li>让数据引导你的决策</li>
<li>通过实证积累直觉</li>
</ul>
<p>让我们看看在构建 AI 应用时所需要的三个重要成果。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="成果一你的数据集">成果一：你的数据集<a href="https://havef.fun/blog/stop-being-such-an-engineer#%E6%88%90%E6%9E%9C%E4%B8%80%E4%BD%A0%E7%9A%84%E6%95%B0%E6%8D%AE%E9%9B%86" class="hash-link" aria-label="成果一：你的数据集的直接链接" title="成果一：你的数据集的直接链接">​</a></h2>
<p>据集是你的指南针。它不仅仅是数字的集合——它是你业务需求的编码 DNA。没有它，你就是在黑暗中摸索。有了它，每一个问题都变得可操作：</p>
<ul>
<li>什么指标真正捕捉了我们的成功？</li>
<li>哪些模式对我们的用户最重要？</li>
<li>我们如何衡量改进？</li>
</ul>
<p>你的数据集将模糊的问题转化为可测试的假设。与其问“哪种嵌入模型最好？”，不如问“哪种模型在我们的测试集中实现了 95% 的召回率？”</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="成果二你的实验">成果二：你的实验<a href="https://havef.fun/blog/stop-being-such-an-engineer#%E6%88%90%E6%9E%9C%E4%BA%8C%E4%BD%A0%E7%9A%84%E5%AE%9E%E9%AA%8C" class="hash-link" aria-label="成果二：你的实验的直接链接" title="成果二：你的实验的直接链接">​</a></h2>
<p>基准测试可能会误导，推特上的讨论可能会引人误入歧途，但实验呢？它们揭示真相。</p>
<p>你的实验框架应该回答：</p>
<ul>
<li>我们能多快地测试一种新方法？</li>
<li>我们的指标是否与业务成果一致？</li>
<li>我们的权衡标准是什么？</li>
</ul>
<p>实际例子：</p>
<ul>
<li>4% 的准确率提升是否值得两倍的成本？</li>
<li>我们应该牺牲延迟来换取更好的结果吗？</li>
<li>我们能否用一半的计算资源实现相似的性能？</li>
</ul>
<p>这些不是理论上的问题——它们是只有通过实验才能回答的实证性问题。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="成果三你的直觉">成果三：你的直觉<a href="https://havef.fun/blog/stop-being-such-an-engineer#%E6%88%90%E6%9E%9C%E4%B8%89%E4%BD%A0%E7%9A%84%E7%9B%B4%E8%A7%89" class="hash-link" aria-label="成果三：你的直觉的直接链接" title="成果三：你的直觉的直接链接">​</a></h2>
<p>AI 开发中最被忽视的成果就是你的科学直觉。它通过以下方式建立：</p>
<ul>
<li>严谨的实验</li>
<li>模式的识别</li>
<li>失败的尝试</li>
<li>成功的迭代</li>
</ul>
<p>每一次实验都增加了你的理解。每一次失败教会你什么行不通以及为什么行不通。这种直觉不是告诉你该用哪个框架，而是帮助你提出更好的问题。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="科学方法的实践">科学方法的实践<a href="https://havef.fun/blog/stop-being-such-an-engineer#%E7%A7%91%E5%AD%A6%E6%96%B9%E6%B3%95%E7%9A%84%E5%AE%9E%E8%B7%B5" class="hash-link" aria-label="科学方法的实践的直接链接" title="科学方法的实践的直接链接">​</a></h2>
<p>这就是实践中的科学方法：</p>
<ul>
<li>从数据集和明确的指标开始</li>
<li>形成一个可测试的假设</li>
<li>进行受控实验</li>
<li>根据基线衡量结果</li>
<li>从结果中建立直觉</li>
<li>重复以上过程</li>
</ul>
<p>注意这里缺少了什么？关于工具的无休止争论，对架构的争论，以及关于哪个模型“最好”的猜测。</p>
<h1>结论</h1>
<p>如果你在用 AI 构建，停止像工程师那样寻找“正确”的解决方案。开始像科学家那样寻找实证真理。你的工作不是选择完美的架构，而是构建能够衡量、测试假设并从数据中学习的工具。</p>
<p>答案不在最新的推特讨论或基准排行榜中。它们在你的数据中，等待着通过严谨的实验被发现。</p>
<p>停止架构设计。</p>
<p>开始实验。</p>
<p>致敬！</p>
<p>Jason</p>
<section style="width:100%"></section>]]></content:encoded>
            <category>insight</category>
        </item>
        <item>
            <title><![CDATA[钱度量衡]]></title>
            <link>https://havef.fun/blog/weights-with-money-and-time</link>
            <guid>https://havef.fun/blog/weights-with-money-and-time</guid>
            <pubDate>Thu, 29 Aug 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[然然的两种理论与个人实践。]]></description>
            <content:encoded><![CDATA[<p>然然的两种理论与个人实践。</p>
<p>然然是个地道的北京爷们儿，嘴皮子利索得能把“鸟巢”吹成“世界第一高楼”。你要是跟他较真，那可真得有一肚子货，不然你这小脑瓜子准保被他绕得云里雾里。他从来不直接骂人，那是小学生干的活儿，他呢，讲一个“类比学”故事，故事套故事，故事里的人物专挑你身边至亲的人，一来一回，把你连着你妈一块儿给捆上。故事里，你妈成了悲剧英雄，听完你就得琢磨了：认个错，还能把你妈从悲情故事里捞出来；不认吧，这“妈”就得被他折腾个大结局。我管这手艺叫“卡人”，管用得很。</p>
<p>我总结然然还有个理论，叫“钱度量衡”，万事都能用钱来度量。前几天，大家正为9.11和9.9哪个数更大争得面红耳赤，然然嘿嘿一笑，亮出杀手锏：“成啊，你说9.11大，行，我给你一万次的9.11元，你给我一万次的9.9元。行不？”这么一说，别人就被卡住了，甭管你之前怎么论证，说完这话，只要不是然然一方的，都得蔫了。</p>
<p>一个人怎么理解钱，往往是环境给惯的。有人觉得一块钱能买俩馒头就很值，有的人非得花上千块吃顿饭才过瘾。各有各的活法儿，谈不上对错。但有些事情，还真就有那么一个对的答案，只是多数人没答对罢了。</p>
<p>比方说吧，有些东西你天天得用，不用还真不行，它好不好直接影响你过日子的舒坦劲儿。这种情况理智点儿，选最好的，别怕花钱，贵有贵的道理。今天听人说要买个AI工具，还得“咬咬牙”才舍得下手。我本来想劝两句，但转念一想，犯糊涂是自己的事儿，劝了也白劝。不过还是想给指北君的读者朋友们提醒一下：别在这儿栽跟头。</p>
<p>你看，一个AI工具，就跟请了个技术大拿天天帮你忙似的，你还以为就花点饭钱就能打发了？这顿饭可不是一锤子买卖，还得长年累月请下去。免费的当然有，也就图个凑合，但只要满足上面那几个条件，最好的选择还是买你能负担的最好版本。很多人老拿免费说事儿，却忘了价值是由自己的需求决定的，不是由免费的多寡来定的。</p>
<p>产品有成本，这成本不仅仅是制造费，还有后续的维护费、改进费等等，还有人家多年经验积累下来的质量成本。这些隐形成本，跟“KNIME视觉化数据分析”前面成本分析一样，看不见，但存在，而且不能忽视，别光盯着制造成本，短视。说到底，对于人类，评估价值的唯一标准就是“时间”。时间才是衡量一切的最靠谱标尺。能给你省下时间的东西，那就值得多花点成本。可惜的是，现在很多人看不起自己的时间长了，觉得别人的时间也跟大白菜似的。</p>
<section style="width:100%"></section>]]></content:encoded>
            <category>insight</category>
        </item>
        <item>
            <title><![CDATA[你只是重新发现了一些东西]]></title>
            <link>https://havef.fun/blog/rediscovery-again</link>
            <guid>https://havef.fun/blog/rediscovery-again</guid>
            <pubDate>Sat, 22 Jun 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[指北君关于另外一条思维路径的发现。]]></description>
            <content:encoded><![CDATA[<p>指北君关于另外一条思维路径的发现。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="自以为是的顿悟时刻">"自以为是"的顿悟时刻<a href="https://havef.fun/blog/rediscovery-again#%E8%87%AA%E4%BB%A5%E4%B8%BA%E6%98%AF%E7%9A%84%E9%A1%BF%E6%82%9F%E6%97%B6%E5%88%BB" class="hash-link" aria-label="&quot;自以为是&quot;的顿悟时刻的直接链接" title="&quot;自以为是&quot;的顿悟时刻的直接链接">​</a></h2>
<p>有很多时候，我会"自以为是"的发现/发明一些东西。这种"自以为是"的时刻通常还带有一些骄傲自豪的情绪。这种感觉特别像古希腊博学家阿基米德
在苦思冥想如何测量不规则物体的体积 -- 如何测量皇冠的体积这个问题时，在公共浴室中顿悟的那个时刻。他大喊着 "eureka"(尤里卡！我找到了！) 并跳出浴室，
赤身裸体的跑回了家。尤里卡效应（The eureka effect）一般也称为啊哈！时刻(Aha! moment)。</p>
<p>老实讲，我个人认为我对情绪的处理能力其实相当有限。无论是对自己情绪的处理或是对别人投射过来的情绪，反应都相当敏感，有的时候会不自觉
的被拖入情绪漩涡而无法自拔。有一次我发现因为某些事情我很生气，一遍遍想着"他怎么能这样！他为什么要这样对我！他凭什么能这样对我！"
我甚至到了气的踢墙的程度。这个时候意外飘过来的一个问题击中了我：</p>
<p>"我能不能不那么生气?"</p>
<p>然后我开始认真思考这个问题。比如，我现在需要做什么才能不让我这么生气？我的目的是什么？我需要别人做什么？我如何需要
别人做我想做的事情？我如何明确的表达我的想法？他之前这么做到底是什么目的？他的目的是为了让我生气吗？他究竟想表达什么？他有没有可能是其他目的？</p>
<p>当我向自己抛出一个一个问题之后。突然发现，不知道什么时候，前面的愤怒情绪完全消失了。这是一个"Aha! moment"。</p>
<p>从那以后，当遇到类似的问题时，我会尽量的进行分析以避免自己进入漩涡。我意识到，人类的思维它不是只有一条思维路径，
而是，你可以给它创建多条路径。比如在上面的情境中，在原来的思维路径旁边，我创造了另外一条路径，对原来的路径进行观察和思考。
原来的路径它可能陷入了局部的一个陷阱（这个点我们一边在数学或优化上称为局部最小值，local minima），而另外的一条路径是可以辅助原来路径跳出那个局部解，
尽量的接近客观事实或解决问题（对应数学上的全局最优解）。</p>
<blockquote>
<p>p.s. 当然了，即使这样，对洪水般的情绪冲击我仍然感觉无能为力，最佳策略还是尽量远离洪水......</p>
</blockquote>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="alphago-的网络架构">AlphaGo 的网络架构<a href="https://havef.fun/blog/rediscovery-again#alphago-%E7%9A%84%E7%BD%91%E7%BB%9C%E6%9E%B6%E6%9E%84" class="hash-link" aria-label="AlphaGo 的网络架构的直接链接" title="AlphaGo 的网络架构的直接链接">​</a></h2>
<p>AlphaGo 是由 Google 子公司 DeepMind Technologies 开发的人工智能程序。它因在 2016 年的五局比赛中第一个击败人类职业围棋棋手李世石而闻名。它的胜利
标志着人工智能领域的一个重要里程碑，展示了机器在解决复杂问题方面的潜力。其实在 AlphaGo 之前，人类已经在围棋方面做了非常多的算法探索。
在计算机学科的一些基础课程里面，一般会学到一个叫做 Alpha-Beta 剪枝的算法，这个算法就可以使用在围棋上。它是一种用于优化搜索算法的技术，常用于两人对弈的棋类游戏（如围棋、国际象棋）。它通过剪枝不必要的节点，减少搜索树的大小，从而加快搜索速度。简单来说就是，如果有 500 种下棋方案，每次下子时，它会根据当前的棋盘情况，缩小下棋方案的范围（比如从200中方案中进行搜索），以更高效的方式找到下一步最佳的落子位置。虽然 AlphaGo 中使用了深度学习，我觉得可以简单理解它只是一种相对于 Alpha-Beta 剪枝更复杂的算法。个人认为，它的成功有一个核心因素，就是它的网络架构。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/alpha_go-51809cbed784cb79ad99e2efafc77c8c.webp" width="690" height="658" class="img_ev3q"></p>
<p>它有两个单独训练的神经网络：策略网络(Policy Network) 和 价值网络(Value Network)。</p>
<p>简单来说，策略网络从当前棋盘状态生成所有可能合法走法的概率分布，它只根据当前的棋盘盘面状态做出决策，优先考虑最有希望的走法，而不必考虑每一步棋的长期影响。
而价值网络可以被视为提供“全局视角”，它重点从整体上估计落子位置对于最终结果（赢或输）可能性的影响。它主要考虑的是当前落子状态的长期后果。</p>
<p>通过整合这两个网络，AlphaGo 可以在局部战术优势和长期战略目标之间取得平衡，从而产生高度复杂且有效的游戏策略。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="它们之间的联系">它们之间的联系<a href="https://havef.fun/blog/rediscovery-again#%E5%AE%83%E4%BB%AC%E4%B9%8B%E9%97%B4%E7%9A%84%E8%81%94%E7%B3%BB" class="hash-link" aria-label="它们之间的联系的直接链接" title="它们之间的联系的直接链接">​</a></h2>
<p>如果你能够看到这里，我相信，你已经发现了上述两件事情的共同逻辑。其中一条思考路径用来思考当前的问题，另外一条思考路径从更广阔的层面对原来的路径进行观察和思考。</p>
<p>人类是一种动物，是一种带有情绪的动物。这种动物使用的沟通方式主要是语言或行为，而语言和行为又天生的存在多义性。当一个人不精确的表达通过另外一个人不精确的接收，再加上有可能陷入的局部错误思考，自然会带来更多的后续问题。</p>
<p>在传统教育中，一般注重的都是知识性内容的教育，对于我们自己是怎么运转的，对于思维是怎么运转的，对于这个世界是怎么运转的，对于我们的职业怎样影响我们的性格，对于其他人性格的理解，我们知道的都是一些只言片语，甚至经常误解，产生各种各样的问题或困惑。但其实绝大部分问题以及答案前人早就研究的清清楚楚，哲学、心理学、历史等等学科早就放在那里等着我们（当然，其中的糟粕也不少），并不需要太多的"自以为是"的顿悟时刻，只需要理解后抄作业即可。可惜的是，我们的时间总是那么少，况且还有那么多无意义的事情等着我们去做。</p>
<p>迈克尔刘易斯是非常非常会讲故事的一个作家。前一阵时间我只是顺着他所有的出版物一本一本读下来，甚至在读之前都不知道这本书是讲什么的。有一本叫做《思维的发现》，没想到是个意外之喜，一周就听完了。如果你对人类如何做决策的心理学问题感兴趣，它肯定适合你。封面上的橡皮擦隐喻了丹尼尔·卡尼曼 (Daniel Kahneman) 和阿莫斯·特沃斯基 (Amos Tversky)提供的擦除和纠正人类中的认知偏差和错误的工具。丹尼尔曾经用到的一个技巧我觉得和上面我的"自以为是"很像，当别人提到一个和他不同的想法的时候，他不会去评价这个想法，而是会去思考，别人的这个想法在什么情况下适用（相当于创造了另外一条思考路径）。最大限度的吸收对方所表达的信息，好棒啊。</p>
<p>考虑到迈尔克刘易斯的写作过程，基本上可以认为，这本书就是丹尼尔和阿莫斯的传记了，两人友谊为之动容，当听到丹尼尔参加阿莫斯的葬礼时，我的心都快碎了，不过现在好了，他们俩又能见面了。</p>
<p>再说回最前面我那个"自以为是"的情绪处理方案。其实心理学中有非常多的现成工具供我们使用，比如认知重构（Cognitive Reframing），它是一种心理技巧，涉及改变你对情况、经历或情感的思考方式。它有助于将消极的想法或看法转化为更积极、更有建设性的想法或看法。我们的想法极大地影响我们的情绪和行为，通过改变这些想法，我们可以改变我们的情绪反应和行为。具体流程就不说了，简单举一两个例子来感受下。</p>
<p>消极想法：“我会在演讲过程中让自己难堪。”</p>
<ul>
<li>识别想法：“我会让自己难堪。”</li>
<li>检查证据：“我已经多次练习我的演讲并收到了很好的反馈。”</li>
<li>考虑其他可能：“即使我犯了一个小错误，也不是世界末日。每个人都会犯错误。”</li>
<li>重构: “我已经准备好了，我会尽力而为。一个小错误不会毁掉演示。让我想想还能做点什么”</li>
</ul>
<p>消极想法：“我的伴侣不关心我，因为他忘记了我们的周年纪念日。”</p>
<ul>
<li>识别想法：“我的伴侣不关心我。”</li>
<li>检查证据：“我的伴侣在许多其他方面表现出了关心。忘记周年纪念日可能是由于压力或忙碌。”</li>
<li>考虑其他可能：“也许他因工作而不知所措，并不是故意忘记的。”</li>
<li>重构：“忘记周年纪念日并不意味着他不在乎。我可以向他说我希望得到什么，而不是像哑谜一样让对方猜。而且我们还可以讨论未来如何不要错过庆祝重要的日子。”</li>
</ul>
<p>认知重构（Cognitive Reframing）看上去不错，但其实还是有点难掌握的。尤其在情绪袭来的时候，很难，但不是不能做到，它可以变成一个长期目标。</p>
<p>还有一个短期就能见效的工具可供使用，它叫做认知解离（Cognitive Defusion），它可帮助个人改变与想法相关的方式，而不用去改变想法的内容。</p>
<p>关键概念:</p>
<ul>
<li>认识到想法只是文字或声音而已，不一定是真理或命令。</li>
<li>采用观察自己想法的视角，而不是沉浸在其中。这有助于更客观地看待想法。</li>
<li>不执着于当前想法</li>
</ul>
<p>场景：你有一个想法：“我是个失败者，我的人生完了。”</p>
<ul>
<li>给想法贴上标签：例如，如果你认为“我是个失败者”，可以将其重新定义为“我认为我个失败者”(只是一个想法，你"认为"而已，并不一定是个事实)</li>
<li>想象一下用愚蠢或夸张的声音（例如卡通人物或有趣的口音）说出的想法。这有助于结构想法的严肃性</li>
<li>多次大声重复这个想法，直到它变成一系列声音</li>
<li>可视化: 想象一下，把这个想法放在一片叶子上，看着它顺流而下：“我看到‘失败者’这个想法在叶子上飘走了。”</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/keda-c574d11c2d85c975139debdab9ca4ea9.jpeg" width="800" height="450" class="img_ev3q"></p>
<blockquote>
<p>我们可以想象下自己是可达鸭，重复说出上面的负面的标签，看能不能解离上面的想法。</p>
</blockquote>
<p>当解决了情绪上的困难之后，如果想再构建一条思维分析路径就相对容易了很多。希望每个人都能更了解自己，了解他人，更了解人类本身这个物种吧。</p>
<p>昨天听一个朋友说他的朋友自杀了。当我母亲过世的时候，我觉得我才理解了(一点)"生命很宝贵"这句话。</p>
<p>真是好可惜呀。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="如何在决策过程中利用这些知识">如何在决策过程中利用这些知识<a href="https://havef.fun/blog/rediscovery-again#%E5%A6%82%E4%BD%95%E5%9C%A8%E5%86%B3%E7%AD%96%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%88%A9%E7%94%A8%E8%BF%99%E4%BA%9B%E7%9F%A5%E8%AF%86" class="hash-link" aria-label="如何在决策过程中利用这些知识的直接链接" title="如何在决策过程中利用这些知识的直接链接">​</a></h2>
<p>这些心理知识也可以用在生活中，用来解决偏见问题。解决偏见的方法最主要的是保持灵活和开放（open-minded）的态度。但可惜的是，只有实践起来，才知道开放（open-minded）有多困难。当你花了很长时间、费劲心思提出一个想法或干了很多工作之后，对方的第一回应是"不对不对！你这种想法是绝对错误的"，"你这个这个方面做的太差劲了"，如果对方再斩钉截铁或语气不好，相信你没有办法很容易的切换视角去理解对方的想法。</p>
<p>技术预测家和斯坦福大学学者保罗·萨福（Paul Saffo）开发出一种思维框架, 是用来帮助解决偏见的, 我很喜欢： "strong opinions, weakly held"(强观点，弱持有)。</p>
<blockquote>
<p>让你的直觉引导你得出结论，无论多么不完美 -- 这就是“强观点”部分。然后是"弱持有"部分 -- 证明自己是错的。进行创造性的怀疑。寻找不合适的信息，或者指向完全不同方向的指标。最终你的直觉会发挥作用，一个新的假设将从废墟中出现，准备再次被无情地撕碎。你会惊讶地发现，一系列错误的预测竟然能够如此迅速地为你提供有用的结果。</p>
</blockquote>
<p>当我们了解并掌握了一些心理学知识和技巧，在解决情绪困难之后，利用别人的视角来检验和完善自己的想法和工作，这难道不棒吗？</p>
<p>当然，如果对方的回应技巧比较好，也许我们可能更容易检验和完善自己的想法或工作。但事实是，世界怎么会按照我们的想法运转呢？</p>
<section style="width:100%"></section>]]></content:encoded>
            <category>insight</category>
        </item>
        <item>
            <title><![CDATA[如何在不懂足球的情况下对欧洲杯进行预测]]></title>
            <link>https://havef.fun/blog/Predict-the-EURO-2024-Outcome</link>
            <guid>https://havef.fun/blog/Predict-the-EURO-2024-Outcome</guid>
            <pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[指北君不懂足球，只是懂点数据。简单聊下欧洲杯预测。]]></description>
            <content:encoded><![CDATA[<p>指北君不懂足球，只是懂点数据。简单聊下欧洲杯预测。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="体育活动中的数据分析和预测">体育活动中的数据分析和预测<a href="https://havef.fun/blog/Predict-the-EURO-2024-Outcome#%E4%BD%93%E8%82%B2%E6%B4%BB%E5%8A%A8%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%92%8C%E9%A2%84%E6%B5%8B" class="hash-link" aria-label="体育活动中的数据分析和预测的直接链接" title="体育活动中的数据分析和预测的直接链接">​</a></h2>
<p>数据早就融入到了专业的体育活动中，无论是提高运动员的表现，还是战术和策略制定，伤病预防和恢复，甚至球迷和商业分析，都离不开数据的分析和预测。</p>
<p>在足球比赛中，可以通过分析比赛数据（如跑动距离、传球准确率、射门次数等），教练和分析师可以评估运动员和球队的表现，识别强项和弱点；而在练习过程中，可以进一步针对运动员设计个性化的训练计划，以提高运动员的体能和技术水平, 甚至使用在每一次运动过程中通过心率监测来调整训练强度和频率；在比赛前，可以通过分析对手的比赛数据，可以发现对手的战术模式、强项和弱点，从而制定有效的比赛策略；在比赛后，对于受伤运动员的恢复过程可以通过数据分析进行跟踪和评估，确保其在安全的情况下恢复训练；通过社交媒体数据分析，了解球迷对比赛的反应和互动，通过分析销售数据和市场趋势，优化营销策略等等。</p>
<p>在这里，我们简单使用现有数据来看一下2024欧洲杯的预测。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="欧洲杯简介">欧洲杯简介<a href="https://havef.fun/blog/Predict-the-EURO-2024-Outcome#%E6%AC%A7%E6%B4%B2%E6%9D%AF%E7%AE%80%E4%BB%8B" class="hash-link" aria-label="欧洲杯简介的直接链接" title="欧洲杯简介的直接链接">​</a></h2>
<p>欧洲杯（UEFA European Championship），全称为欧洲足球锦标赛，是由欧洲足球协会联盟（UEFA）组织的欧洲国家队间的足球赛事。它是世界上最重要和最受关注的足球赛事之一，仅次于国际足联世界杯（FIFA World Cup）。</p>
<p>欧洲杯的首届赛事于1960年在法国举行，当时被称为“欧洲国家杯”（European Nations' Cup）。赛事每四年举行一次，通常在偶数年，与世界杯交错进行。</p>
<p>最初只有四支球队参加决赛圈比赛，之后逐渐扩展为八支、十六支，直到2020年扩展到二十四支球队。参赛球队通过预选赛阶段决定，预选赛阶段由各个欧洲国家队参加，以争取进入决赛圈的名额。目前的赛制包括小组赛和淘汰赛两个阶段。小组赛阶段，二十四支球队被分成六个小组，每组四支球队。每组前两名和四个成绩最好的第三名进入淘汰赛阶段(需要这四个队伍才能凑齐后面的比赛)。淘汰赛阶段包括八分之一决赛、四分之一决赛、半决赛和决赛。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="欧洲杯数据分析预测步骤">欧洲杯数据分析预测步骤<a href="https://havef.fun/blog/Predict-the-EURO-2024-Outcome#%E6%AC%A7%E6%B4%B2%E6%9D%AF%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A2%84%E6%B5%8B%E6%AD%A5%E9%AA%A4" class="hash-link" aria-label="欧洲杯数据分析预测步骤的直接链接" title="欧洲杯数据分析预测步骤的直接链接">​</a></h2>
<p>对于足球比赛的预测来说，其实和任何一个预测模型的建立流程并无区别。包括数据收集、预处理、数据分析与特征选择、模型选择与训练、模型评估、实际预测等多个步骤。其中相对花费时间较多的是数据收集过程，收集的数据包括：</p>
<ul>
<li>历史比赛数据：包括过去比赛的结果、进球数、红黄牌、控球率等。</li>
<li>球员数据：球员的个人表现数据，如进球数、助攻数、防守数据等。</li>
<li>球队数据：球队的整体表现数据，如胜率、攻防效率等。</li>
<li>环境数据：包括比赛场地、天气条件、观众数量等。</li>
<li>即时数据：球队和球员的当前状态、伤病情况等。</li>
</ul>
<p>当收集好这些数据之后，就可以进行后续的工作了。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="彩票公司或博彩公司">彩票公司（或博彩公司）<a href="https://havef.fun/blog/Predict-the-EURO-2024-Outcome#%E5%BD%A9%E7%A5%A8%E5%85%AC%E5%8F%B8%E6%88%96%E5%8D%9A%E5%BD%A9%E5%85%AC%E5%8F%B8" class="hash-link" aria-label="彩票公司（或博彩公司）的直接链接" title="彩票公司（或博彩公司）的直接链接">​</a></h2>
<p>他们其实也是这么做的。收集历史数据，然后使用一些统计模型，再参考一些专家建议，得到对比赛的一个初步预测结果。</p>
<p>对于他们来说，比赛的预测结果当然很重要，但更重要的是风险管理, 也就是赔率的设计: 如何将预测的概率结果转换为赔率。</p>
<p>假设有一场足球比赛，球队A对阵球队B。博彩公司通过分析历史数据、统计模型和专家意见，得出以下初始概率：</p>
<ul>
<li>球队A胜率：50%</li>
<li>平局概率：25%</li>
<li>球队B胜率：25%</li>
</ul>
<p>初始赔率可以这样计算：</p>
<ul>
<li>球队A胜：1/0.50 = 2.00</li>
<li>平局：1/0.25 = 4.00</li>
<li>球队B胜：1/0.25 = 4.00</li>
</ul>
<p>如果大量资金投注在球队A获胜上，博彩公司会将球队A的赔率降低，例如调整到 1.80，同时提高平局和球队B胜的赔率，以平衡投注和风险。这也就是在不同的时间段博彩公司的赔率发生变化的根本原因 -- 平衡自己的风险。</p>
<p>除了这种动态赔率调整以外，他们还会使用一些其他的策略来平衡风险，比如限额策略，设置每个玩家或每场比赛的最大投注金额，防止单个大额投注对公司财务的冲击；再比如，多样化策略，提供多种投注类型，如胜平负、半场/全场比分、总进球数等等，以吸引不同类型的投注者，并分散单一结果的风险。</p>
<p>甚至还可以使用一些对冲策略，在其他博彩平台上对冲部分风险，即在自己平台上某个结果的投注量过大时，在其他平台上下注相同结果，以分散风险。甚至为一些特定高风险赛事购买保险，以防止由于异常结果导致的巨额亏损。</p>
<p>当然了，实时监控也是他们风险管理的重要一环。对于被认为有异常投注行为的客户，列入黑名单，限制或禁止其投注。或者，嗯嗯。</p>
<p>根据上面的赔率，如果有 2 个人押注 A 队胜利，其他 2 个人分别压住平局或球队 B 胜利，那么博彩公司是不挣钱的。他们主要是通常通过设置适当的利润率（也称为“过关”或“总返还率”）来确保无论比赛结果如何，他们都能从投注中获利。也就是说，总返还率通常小于100%，以保证博彩公司有一定的利润。一般来说，在设置了总返还率之后，还需要根据投注金额分布动态调整赔率才可能保证盈利。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="对于-2024-欧洲杯">对于 2024 欧洲杯<a href="https://havef.fun/blog/Predict-the-EURO-2024-Outcome#%E5%AF%B9%E4%BA%8E-2024-%E6%AC%A7%E6%B4%B2%E6%9D%AF" class="hash-link" aria-label="对于 2024 欧洲杯的直接链接" title="对于 2024 欧洲杯的直接链接">​</a></h2>
<p>上面说过的足球数据是一些低维度的特征，对于整体比赛来说，肯定都是有用的，但考虑到时间等成本因素，我们可以直接使用一些高维度的特征。高维度的特征虽然用起来很方便，但毕竟损失了很多细节，需要"提前"有这个意识。</p>
<p>在 wiki 上，有一个非常不错的高维度特征：球队阵容。</p>
<blockquote>
<p><a href="https://en.wikipedia.org/wiki/UEFA_Euro_2024_squads" target="_blank" rel="noopener noreferrer">https://en.wikipedia.org/wiki/UEFA_Euro_2024_squads</a></p>
</blockquote>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/squads-f319092565067adffdfa6f04cd5d3797.png" width="721" height="495" class="img_ev3q"></p>
<p>比如对于德国队来说，网页列出了每个队员的基本情况，姓名、出生年月、出场次数(Caps)、进球数，以及所在俱乐部的名字。提取数据是一个相对来说简单的过程，通过几个 <code>xpath</code> 节点很容易获取到我们想要的数据。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/%E7%90%83%E9%98%9F%E9%98%B5%E5%AE%B9-9a19f0d7c16d409258362fe198462fbc.png" width="700" height="238" class="img_ev3q"></p>
<p>然后我们可以直接把结果塞入到 KNIME Network Mining Extension(网络挖掘扩展)的 <code>Network Analyzer</code> 节点中。这个节点配置其实还是有点复杂的，至少需要对图论有一些简单了解。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/network_ana-80d35d17497f61d4cb3c30b37cc7a767.png" width="583" height="524" class="img_ev3q"></p>
<p>我们在这里重点使用 <code>Hubs &amp; Authority</code>。指北君给你举一个例子让你理解这两个概念。在一个公司，保安大叔认识所有工作人员，他就是有着极高 <code>Hub</code> 分数的节点，而一些销售专家、技术专家、以及有强大后台权势的人就是有着极高的 <code>Authority</code> 分数的节点。</p>
<p>在我们的例子中，<code>Hub</code> 分数高的就是俱乐部节点，分数越高，说明它给各个不同的欧洲国家队输送的队员多。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/hub_score-6add47f0e5b5c34367c5348206661722.png" width="258" height="303" class="img_ev3q"></p>
<p>图片中是 <code>Hub</code> 分数比较靠前的俱乐部，他们分别是:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">巴黎圣日尔曼</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">皇家马德里</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">巴塞罗那</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">国际米兰</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">拜仁慕尼黑</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">曼彻斯特城</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">勒沃库森</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">布拉格斯拉维亚</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">阿森纳</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">米兰</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">莱比锡红牛</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">利物浦</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">多特蒙德足球俱乐部</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">罗马</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">尤文图斯</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>可以看出，它们当 <code>Hub</code> 是有一定的合理性的。</p>
<p><code>Authority</code> 分数高的就是欧洲国家队。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/authority_score-5e3ae84140e83bdb5ef73ee97770fd79.png" width="269" height="456" class="img_ev3q"></p>
<p>对于德国对来说，它们最大的 Hub 连接点是拜仁和斯图加特。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/germany-66cb3ec708080d016024ff16f51678c9.png" width="358" height="1042" class="img_ev3q"></p>
<p>指北君在看图的时候，发现了一个异常粗的 edge, <code>Czech Republic</code>(捷克) 和 <code>Slavia Prague</code>(布拉格斯拉维亚) 之间的 edge。捷克国家队 26 人的大名单中，有 9 人来自布拉格斯拉维亚，amazing！</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/czech-4cb498fafd0825605ff6b69bece9e540.png" width="1003" height="344" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="其他">其他<a href="https://havef.fun/blog/Predict-the-EURO-2024-Outcome#%E5%85%B6%E4%BB%96" class="hash-link" aria-label="其他的直接链接" title="其他的直接链接">​</a></h2>
<p>最简单的投注策略就是，两队比赛，投注高 <code>Authority</code> 的队伍即可。</p>
<p>指北君买了 3 张彩票，一共花了 30 元。买的是那种连续对 5 场比赛就能中奖的彩种。</p>
<p>欧洲杯已经过去两天了，目前来看，其中有一张彩票，5 场中已经中了 4 场，还有一场今晚出结果。其余的，目前已经出结果的比赛，均是对的。</p>
<p>在指北君完全不懂足球的前提下，根据这种简单模型的指导，结果让人感到惊讶。</p>
<p>有人会觉得这是赌博。但 Gambling 和 Betting 是有区别的。</p>
<p>人生中的许多选择何尝不是一种 Gambling，我们能做的也就是，度量风险与收益，衡量目标和意义，做出更明智的 Betting。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="参考">参考<a href="https://havef.fun/blog/Predict-the-EURO-2024-Outcome#%E5%8F%82%E8%80%83" class="hash-link" aria-label="参考的直接链接" title="参考的直接链接">​</a></h2>
<ul>
<li><a href="https://medium.com/low-code-for-advanced-data-science/using-graph-theory-and-knime-analytics-platform-to-predict-the-euro-2024-outcome-8ab78a1650a4" target="_blank" rel="noopener noreferrer">Using Graph Theory and KNIME Analytics Platform to Predict the EURO 2024 Outcome | by Martin D Aus A | Low Code for Data Science | Jun, 2024 | Medium</a></li>
<li><a href="https://hub.knime.com/lowcodeaiftw/spaces/Public/Projects/EURO2024/Graph%20Theory/GraphTheory~Uyy5MKBJFrXJThty/current-state" target="_blank" rel="noopener noreferrer">GraphTheory – KNIME Community Hub</a></li>
</ul>
<section style="width:100%"></section>]]></content:encoded>
            <category>KNIME</category>
            <category>football</category>
        </item>
        <item>
            <title><![CDATA[KNIME 正在煮什么(What's cooking)-2024/05]]></title>
            <link>https://havef.fun/blog/KNIME-Whats-Cooking-240503</link>
            <guid>https://havef.fun/blog/KNIME-Whats-Cooking-240503</guid>
            <pubDate>Fri, 03 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[一瞥 KNIME 正准备发布的新功能]]></description>
            <content:encoded><![CDATA[<p>一瞥 KNIME 正准备发布的新功能</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="expression-节点">Expression 节点<a href="https://havef.fun/blog/KNIME-Whats-Cooking-240503#expression-%E8%8A%82%E7%82%B9" class="hash-link" aria-label="Expression 节点的直接链接" title="Expression 节点的直接链接">​</a></h2>
<p>在现有的 KNIME 环境中(<code>&lt;=5.2</code>)，已经有了 String Manipulation, Math Formula, Rule Engine 甚至还有 Lab 扩展中的 Column Expression 节点。但这些节点各有各的问题，比如功能和描述有些相悖，比如 String Manipulation 节点可以输出不是字符串的内容；或功能不够完善，比如想要在 Math Formula 节点中做一些逻辑判断有点麻烦；或其他一些问题，比如 Column Expression 节点已经在 Lab 扩展中很久了，功能也还不错，但编辑界面吧，真是有点落伍了</p>
<p>接下来 Lab 扩展中会有一个 Expression 节点，可以支持 AI，有现代的编辑器编辑界面，事实上，如果你用过新版本中的 Python 节点，你就会知道，它们的体验基本上是一致的，只不过使用了不同的计算引擎</p>
<p>如果你之前觉得 String Manipulation, Math Formula, Rule Engine 中的细节功能没搞懂，那么现在我觉得可以跳过了 😊</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="reporting-相关功能">Reporting 相关功能<a href="https://havef.fun/blog/KNIME-Whats-Cooking-240503#reporting-%E7%9B%B8%E5%85%B3%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="Reporting 相关功能的直接链接" title="Reporting 相关功能的直接链接">​</a></h2>
<p>目前，Reporting 制作 PDF 已经不错了，还在改进中，很快就支持将报告输出为 Html 然后放在邮件中进行发送。静态报告通过绘图 + AI输出分析结果的方式蛮有意思。如果你之前在用 BIRT 做报告，那么现在指北君建议你就再不要深挖 BIRT 了。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="邮件相关功能">邮件相关功能<a href="https://havef.fun/blog/KNIME-Whats-Cooking-240503#%E9%82%AE%E4%BB%B6%E7%9B%B8%E5%85%B3%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="邮件相关功能的直接链接" title="邮件相关功能的直接链接">​</a></h2>
<p>之前版本早就有一些邮件发送功能了，现在 KNIME 为了配合新的 Reporting 又重写了电子邮件发送节点(Email Sender)</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="其他">其他<a href="https://havef.fun/blog/KNIME-Whats-Cooking-240503#%E5%85%B6%E4%BB%96" class="hash-link" aria-label="其他的直接链接" title="其他的直接链接">​</a></h2>
<ul>
<li>Variable Filter 流变量过滤功能，这样工作流中的流变量就会更整洁一些</li>
<li>Workflow 可以(需要hub)直接在浏览器中编辑或查看节点结果输出。这也就是指北君在 2022年 KNIME 第一次出现新界面(Modern UI)的时候说过的，"新界面不只是为了用户体验" 的另外一层含义</li>
<li>Giskard Scanner 是机器学习模型整个工作流程检测相关的节点</li>
<li>OpenAI 的模型微调(Fine-Tuner)节点</li>
<li>Personally Identifiable Information (PII) 个人身份信息相关节点。比如匿名化，去匿名化节点等等。这些都是数据合规或为了和大语言模型沟通时的必要功能</li>
<li>本地存储了 K-AI 的历史记录，当然也顺便存储了花费的 token 数量</li>
<li>Modern UI 增加了一些快捷键，使用更方便</li>
</ul>
<section style="width:100%"></section>]]></content:encoded>
            <category>KNIME</category>
        </item>
        <item>
            <title><![CDATA[KNIME 国际化支持投票]]></title>
            <link>https://havef.fun/blog/KNIME-i18n-Chinese</link>
            <guid>https://havef.fun/blog/KNIME-i18n-Chinese</guid>
            <pubDate>Tue, 16 Apr 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[你的投票也许能让 KNIME 中文化快一点点。]]></description>
            <content:encoded><![CDATA[<p>你的投票也许能让 KNIME 中文化快一点点。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/t9n_l10n_i18n_localization_internationalization-4cd80e1b2828772ac898ea52c6b716b3.png" width="1200" height="700" class="img_ev3q"></p>
<p>i18n 是个很搞笑的单词，它是英文 internationalization 国际化的缩写。18 指的是首字母i和末字母n中间有18个字母。另外还有什么 K8s 也是一样，中间省去了8个字母 ... 真是懒的可以。指北君还想起一个类似的笑话，少儿不宜，就不在这里说了。</p>
<p>KNIME 的开发是由康斯坦茨大学的软件工程师团队于 2004 年 1 月开始开发的，也就说，到 2024 年，它已经发展了20个年头。AI 和 Modern UI 是最近几个版本的重头戏，遗憾的是，这款开源软件仍然没有中文界面。</p>
<p>虽然对于指北君来说，英文界面没有任何问题，但考虑到经常有很多人问什么时候能有中文界面呀，于是我在它的论坛中提交了一份建议，就是 i18n 的支持。说是国际化支持，如果已经是英文界面，那么最大的国际化其实就是中文。KNIME 官方会根据反馈和建议的投票来规划开发路线。对于他们的界面开发重心已经移动到 Modern UI 界面来看，让他们在经典界面中实现中文其实是不那么现实的。另外，对于以 Vue 为核心的 Modern UI 来说，其实支持 i18n 并不是那么太麻烦。</p>
<p>所以考虑到几个方面的原因，我提了一份建议，如果对中文界面有期待的同学，可以去投票了。</p>
<p><a href="https://forum.knime.com/t/feature-suggestion-i18n-support-for-modern-ui/78535" target="_blank" rel="noopener noreferrer">https://forum.knime.com/t/feature-suggestion-i18n-support-for-modern-ui/78535</a></p>
<p>指北君只能帮你到这了。或者学学英文吧，就那几个单词嘛 ...</p>
<blockquote>
<p>另外有朋友说，国内不是有一些中文界面的 KNIME 吗？我只想说 KNIME AP 是 GPL 协议的开源软件，建议不要乱搞。就说这么多吧。</p>
</blockquote>
<section style="width:100%"></section>]]></content:encoded>
            <category>KNIME</category>
        </item>
        <item>
            <title><![CDATA[Game of Nodes 8进4, 指北君惨遭淘汰]]></title>
            <link>https://havef.fun/blog/game-of-nodes-8-4</link>
            <guid>https://havef.fun/blog/game-of-nodes-8-4</guid>
            <pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Game of Nodes, 8进4，截图欣赏。]]></description>
            <content:encoded><![CDATA[<p>指北君惨遭淘汰。</p>
<p>以下是 Game of Nodes 8 进 4 的截图拼贴。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/8to4-d00f078bb972fbef67bd5dc933527645.png" width="1280" height="720" class="img_ev3q"></p>
<p>指北君遇到的是这一题(对手交出来的可视化是右上角方案)：</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="美国蜂窝塔覆盖问题">美国蜂窝塔覆盖问题<a href="https://havef.fun/blog/game-of-nodes-8-4#%E7%BE%8E%E5%9B%BD%E8%9C%82%E7%AA%9D%E5%A1%94%E8%A6%86%E7%9B%96%E9%97%AE%E9%A2%98" class="hash-link" aria-label="美国蜂窝塔覆盖问题的直接链接" title="美国蜂窝塔覆盖问题的直接链接">​</a></h2>
<p>挑战描述：</p>
<p>您在一个由许多不同电信公司组成的大型美国电信网络中担任数据分析师。在过去 10 年中，该网络显着增长，扩大了其在该国的客户群和覆盖范围。经过这么长的扩展期，管理层希望全面了解网络的情况。因此，您的任务是创建一个交互式、高度可定制且响应迅速的仪表板，以传达关键见解。您有责任选择哪些见解值得与管理层分享。</p>
<p>此外，该数据集还提供有关 47,000 多个蜂窝塔的信息，例如位置、地理坐标、所有权和技术规格。因此，您的仪表板还应包括地理空间地图，显示国家/地区被蜂窝塔广泛覆盖的区域以及覆盖较差的区域，给定可定制的覆盖距离（例如，每个塔周围 20 公里的区域是视为适当覆盖）。</p>
<p>最后，根据仪表板中提供的见解，向管理层提供三项业务建议，以便他们能够更好地规划网络未来增长的投资。在注释中输入您的建议。</p>
<p>关键要求：您必须依赖 Geospatial Analytics Extension 的节点来预处理地理空间数据并创建交互式地图</p>
<p>期待结果：交互式数据应用程序，用于显示网络的关键见解以及地理空间地图上选定区域的蜂窝塔覆盖范围。</p>
<p>数据集</p>
<blockquote>
<p>来自 Kaggle 的美国蜂窝塔数据集：<a href="https://www.kaggle.com/datasets/jahaidulislam/cellular-towers-in-usa" target="_blank" rel="noopener noreferrer">https://www.kaggle.com/datasets/jahaidulislam/cellular-towers-in-usa</a></p>
</blockquote>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="指北君探索笔记">指北君探索笔记<a href="https://havef.fun/blog/game-of-nodes-8-4#%E6%8C%87%E5%8C%97%E5%90%9B%E6%8E%A2%E7%B4%A2%E7%AC%94%E8%AE%B0" class="hash-link" aria-label="指北君探索笔记的直接链接" title="指北君探索笔记的直接链接">​</a></h2>
<p>对于 Dashboard 的话，其实并不是 KNIME 的强项，即使结合了 Geospatial Analytics Extension 扩展，交互性也相当有限。如果想要做一些可视化效果比较好的内容，要比 Tableau 付出更多努力，甚至在付出更多努力之后，也难以望其项背。</p>
<p>但 KNIME 也并非毫无还手之力，对于只想有一个不错的，也许可以使用的结果的时候，KNIME 自然能发挥它的作用。数据分析? 不，KNIME 早就超越了通俗意义上的数据分析了。让我们在本次挑战中见识一下。</p>
<p>对于纽约州的蜂窝塔覆盖大概是这样：</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/scatterPlot-ed24fc769c7c034d29da33ab6e7db1d8.png" width="869" height="679" class="img_ev3q"></p>
<p>当然可以把蜂窝塔的位置映射到地图上:</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/scatter2map-49f7995ac893e66a7f8e59b8296eb3a4.png" width="760" height="907" class="img_ev3q"></p>
<p>但是我比较懒，散点图就很好。</p>
<blockquote>
<p>btw, 加拿大为什么那么多绿地...</p>
</blockquote>
<p>对于每一座塔来说，它都有一定的覆盖范围，在挑战中定义为 20 公里。显然这是为了问题的简化，这里的距离只能在非常开阔的地方实现，当然更不用说 5G 了。也就是说，在不区分基站大小、宏基站、微基站、微微基站以及可能存在的只面对某个方向扇形的基站的情况下进行简单建模。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/scatterCover-446cdd2f862cc0c7ad32d7179d1457c0.png" width="852" height="688" class="img_ev3q"></p>
<p>同样，在后续分析中，我们也不去修饰这些覆盖了。另外，因为没有用人口数据，所以至于空白的位置要不要添加新塔的评估比较麻烦，我们也直接跳过。</p>
<p>至此，问题已经简化为，对于上述这些蜂窝塔覆盖，怎样用更少的蜂窝塔达成基本相同的覆盖 -- 即，拆除一些蜂窝塔或将其挪为它用。中文世界中管这叫，降本增效，哈哈。</p>
<p>指北君在这里使用了一种非常像特征选择的 RFE 方法(recursive feature elimination，递归特征消除), 即，每次随机移除一些点，然后观察总覆盖面积有没有下降，如果没有下降，那么就移除成功，如果下降的太厉害，那么就移除失败，继续尝试下一次移除，在随机几次移除都没有成功的情况下，宣告移除结束。(early stopping? )</p>
<p>是不是听上去很简单？其实效果也不错，如下图所示，左图是原来的一些蜂窝塔位置，右图就是移除之后的最终结果了。</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/plot_comparison-b3e1559f57f80e080919e2cd28d9f495.png" width="976" height="490" class="img_ev3q"></p>
<p>整体移除效果么，我觉得还不错，再来看下最终 Dashboard 吧:</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/final_dashboard-11f08dcba850695fc222ef33d39d156e.png" width="1080" height="1486" class="img_ev3q"></p>
<p>看上去似乎有 Bug, 上面的两个点怎么就被移除了? 这其实是因为我在算法中定义了一个阈值，用来 tradeoff 覆盖面积和移除，即，如果覆盖面积不小于原来覆盖面积的 99.99%，也可以移除。从这个角度来看，算法是有一定缺陷的，如果有更多的数据，比如各个街道的人口，各个塔日常的负载数据，也许这个问题会更容易解决一些，或者在考虑是否移除塔之前，做一些其他约束。</p>
<p>挑战还要求给管理层提建议，指北君建议，组建一个统一管理蜂窝塔规划、统一运营蜂窝塔的部门或公司。嗯? 铁塔公司？hahaha</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="对手方案">对手方案<a href="https://havef.fun/blog/game-of-nodes-8-4#%E5%AF%B9%E6%89%8B%E6%96%B9%E6%A1%88" class="hash-link" aria-label="对手方案的直接链接" title="对手方案的直接链接">​</a></h2>
<p>从截图来看，对手 <del>狡猾</del> 聪明的使用了人口的时间序列数据。根据人口增长的速度和基站增长的速度获取一些 insight，数据方面指北君是服气的，我也尝试搞定美国的census，怎奈 <code>Access Denied</code>：</p>
<p><img decoding="async" loading="lazy" src="https://havef.fun/assets/images/accessdenied-a618b9f03ebdaec7107dc7604c111cc7.png" width="609" height="260" class="img_ev3q"></p>
<blockquote>
<p>题外话，灯塔国你自己都这样，还有脸说别人的数据开放程度怎样怎样? shame on you</p>
</blockquote>
<p>对手的可视化也是杀的我心服口服。</p>
<p>虽然被淘汰，但指北君对自己的降本增效方案还是比较满意的。哈哈。</p>
<section style="width:100%"></section>]]></content:encoded>
            <category>KNIME</category>
            <category>node</category>
        </item>
    </channel>
</rss>